为什么这个简单的FOR LOOP在我的Linux bash中不起作用?

Rob*_*ume 11 unix linux bash shell

我正在尝试在UNIX脚本(bash)中执行一个简单的for循环.

这是我的脚本:

for i in {1..3}
do
   echo "Welcome $i times"
done
Run Code Online (Sandbox Code Playgroud)

我期待这个输出......

Welcome 1 times
Welcome 2 times
Welcome 3 times
Run Code Online (Sandbox Code Playgroud)

......但是我明白了......

Welcome {1..3} times
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Joh*_*024 13

你没有提到你是如何执行你的脚本的,这可能会有所作为.假设我们有一个脚本:

$ cat welcome.sh
for i in {1..3}
do
   echo "Welcome $i times"
done
Run Code Online (Sandbox Code Playgroud)

从bash shell中观察以下三个welcome.sh调用:

$ ps -p $$
  PID TTY          TIME CMD
11509 pts/25   00:00:00 bash
$ source welcome.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
$ bash welcome.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
$ sh welcome.sh
Welcome {1..3} times
Run Code Online (Sandbox Code Playgroud)

最后一个失败,因为在我的系统上,sh默认为dash,而不是bash.例如,对于任何现代的Debian/Ubuntu派生系统都是如此.

  • 这是一个很好的提醒,`bash`,当被调用为"sh"时,*默默地*进入兼容模式. (3认同)