大括号扩展在脚本中不起作用

大括号扩展在脚本中不起作用
for i in {1..40}
do 
   echo $i
done

我有

{1..40}

我想要类似的东西

1
2
3
and so on

i所以我可以在命令的参数中使用该变量。

答案1

巴什3.0+(以及 zsh 和 ksh93),{1..40}将扩展到 1-40(含)的数字。在一个POSIX外壳就像破折号(这是/bin/shUbuntu 中的典型)一样,它不会工作(我们称这个问题为“bashism”)。

在具有 GNU 实用程序的系统上,您可以使用以下命令seq来完成此操作:

for i in $(seq 1 40)
do
    echo $i
done

为了更加便携,您必须$iwhile循环中手动递增:

i=1
while [ $i -le 40 ]
do
    echo $i
    i=$((i+1))
done

这个便携式版本也稍微快一些,因为它缺少外部命令。

相关内容