为什么 运行 bash 中的 for 循环会导致不需要的输出而不是循环?

Why running a for loop in bash resulting in undesired output and not a loop?

我正在尝试在 Bash shell 中编写一个 for 循环。 这是我想出的:

for i in {0..20..5}
do
  echo "Number: $i"
done

然而输出是:

Number: {0..20..5}

我也试过这个代码:

N=10
for i in 1 2 3 4 5 .. $N
  do
     echo "Welcome $i times"
 done

但在这种情况下,输出也是:

Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
Welcome .. times
Welcome 10 times

我想写一个 for 循环,我可以在其中获取限制以及递增或递减值。

这是完整的脚本:

#! usr/bin/bash

N=10
for i in 1 2 3 4 5 .. $N
  do
     echo "Welcome $i times"
 done

for i in {0..20..5}
do
  echo "Number: $i"
done

脚本似乎是正确的。

然而,正如您在评论中指出的那样,运行使用 sh 设置脚本似乎是这里的问题所在。

在基于 Debian 的发行版中,sh 现在链接到“dash”而不是“bash”。所以最有可能的是,当您执行 sh.

时,您已经 运行 用破折号连接了这个脚本

要检查 sh 是否链接到“破折号”,运行

ls -la /bin/sh

如果输出是这样的: lrwxrwxrwx 1 root root 4 Oct 18 19:37 /bin/sh -> dash,它被符号链接到“破折号”。

现在,这应该可以解决问题。

  1. 首先使脚本可执行。
chmod +x <script_name>.sh
  1. 现在尝试运行使用脚本
./<script_name>.sh

这将 运行 bash 中的脚本。