"sh runMyCode.sh"不以"for {10..99}"中的格式循环

gun*_*ess 0 bash shell ubuntu centos

我是新手来抨击脚本,所以我错过了一些东西,但甚至无法想象缺少什么.以前脚本运行良好,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
Run Code Online (Sandbox Code Playgroud)

如果我./runMyScript.sh按照预期的那样运行脚本,因为它从10到99激活:

Activating ABC10 DEF 
Activating ABC11 DEF 
Activating ABC12 DEF 
...
Activating ABC99 DEF 
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行代码,因为sh runMyScript.sh它不循环并且它激活单个元素,Activating ABC{10..99}DEF仅打印.脚本文件也可以作为两个方法执行-rwxr-xr-x.

我不知道这是否正常,因为两种方法的工作方式就像平台上的魅力一样CentOS 5.我知道在shell ./上运行bash并sh运行,但那么在CentOS上有什么用,在Ubuntu上有什么用呢?我可以做什么,两个平台,两种方法都一样?

P.P*_*.P. 7

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

./script.sh如果您有适当的shebang,请务必使用,或者[bash|ksh|whatever] script.sh如果您为特定的shell编写代码,请使用.使用与编写代码不同的解释器并不总是有效.即使它偶尔也会这样做,因为一个shell的构造可能不可用或具有相同的语义,所以它很危险.