gpt4 book ai didi

bash - "sh runMyCode.sh"不以 "for n in {10..99}"格式循环

转载 作者:行者123 更新时间:2023-12-04 18:54:57 26 4
gpt4 key购买 nike

我是 bash 脚本的新手,所以我遗漏了一些东西,但我什至无法想象遗漏了什么。之前的脚本在 CentOS 5 上运行良好但最近我切换到 Ubuntu 14.04 LTS并且循环开始无法按预期工作。这是代码:

#!/bin/bash

for n in {10..99}
do
if ! ps aux | grep "ABC$n DEF " | grep -v grep
then
echo "Activating ABC$n DEF "
fi
done

如果我以 ./runMyScript.sh 运行脚本正如预期的那样,它从 10 激活到 99:
Activating ABC10 DEF 
Activating ABC11 DEF
Activating ABC12 DEF
...
Activating ABC99 DEF

但是,如果我将代码运行为 sh runMyScript.sh它不会循环,它会激活单个元素,打印 Activating ABC{10..99}DEF只要。
对于这两种方法,脚本文件也可以执行为 -rwxr-xr-x .

我不知道这是否正常,因为两种方法在平台 CentOS 5 上都像魅力一样起作用.我知道 ./运行于 bashsh在 shell 上运行,但是什么在 CentOS 上有效,什么在 Ubuntu 上无效?我该怎么做才能使两个平台,两种方法都起作用?

最佳答案

shdash在 Ubuntu 上,它不理解循环序列 {10..99} .所以它在解释整个 {10..99} 时循环。作为一个字符串。我相信默认sh在 CentOS 上是 bash 或 ksh。所以它有效。

始终使用 ./script.sh如果你有适当的 shebang 或使用 [bash|ksh|whatever] script.sh如果您有为特定 shell 编写的代码。使用与编写代码不同的解释器并不总是有效。即使有时这样做,它也是危险的,因为一个 shell 的构造可能不可用或具有相同的语义。

关于bash - "sh runMyCode.sh"不以 "for n in {10..99}"格式循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com