我有一个看起来像这样的脚本:
test.sh
!/bin/bash
for i in {0..10}
do
echo "Welcome $i times"
done
如果我像sh test.sh
一样运行,我只会Welcome {0..10} times
但是,如果我将其作为bash test.sh
运行,我会得到:
Welcome 0 times
Welcome 1 times
.... and so on
此外,如果我在redhat终端上运行相同的脚本。我收到一个错误:
root@UPLC-PPM-DEV-01 TEST]# sh test.sh
'est.sh: line 3: syntax error near unexpected token `do
'est.sh: line 3: ` do
这里有什么问题?
答案 0 :(得分:6)
这与for
无关。
只有bash支持{0..10}
语法。
简单来说,你可以使用
seq 0 10
(如果您的平台支持)或
i=`expr $i + 1`
创建一个计数器并使用while
。
答案 1 :(得分:3)
确定要使用的shell,bash
或sh
。 bash
有许多语法扩展,您可以显示其中一个。
现在,您可以执行:ls -l /bin/sh
并找到:
lrwxrwxrwx. 1 root root 4 Apr 16 11:12 /bin/sh -> bash
但不要误以为你可以交换sh
和bash
。该程序使用一种常见的技巧来检查它所调用的名称(在C中,argv[0]
)。如果程序名称为sh
,则会关闭所有扩展名。引用man
页面:
“如果使用名称sh调用bash,它会尽可能地模仿sh的历史版本的启动行为,同时也符合POSIX标准。”