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

Ben*_*min 4 shell bash shell-script brace-expansion

for i in {1..40}
do 
   echo $i
done
Run Code Online (Sandbox Code Playgroud)

我有

{1..40}
Run Code Online (Sandbox Code Playgroud)

我想要一些类似的东西

1
2
3
and so on
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*atz 6

bash 3.0+(以及 zsh 和 ksh93)中,{1..40}将扩展到 1-40(含)的数字。在像 dash 这样的POSIX shell/bin/sh在 Ubuntu 中很典型),它不会工作(我们称这个问题为“bashism”)。

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

for i in $(seq 1 40)
do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

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

i=1
while [ $i -le 40 ]
do
    echo $i
    i=$((i+1))
done
Run Code Online (Sandbox Code Playgroud)

由于缺少外部命令,此便携式版本的速度也稍快一些。