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

"sh runMyCode.sh" not loops in format "for n in {10..99}"

我是 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。我知道 bash 上的 ./运行s 和 shell 上的 sh运行s,但是在 CentOS 上有什么作用以及有什么作用不在 Ubuntu 上?我该怎么做才能让两个平台、两种方法都一样?

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

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