小编典典

Shell 脚本“for”循环语法

all

我已经完成了以下工作:

for i in {2..10}
do
    echo "output: $i"
done

它产生一串output: 2, output: 3, 等等。

但是,尝试运行以下命令:

max=10
for i in {2..$max}
do
    echo "$i"
done

产生以下内容:

output: {2..10}

如何让编译器意识到它应该将 $max 视为数组的另一端,而不是字符串的一部分?


阅读 66

收藏
2022-06-01

共1个答案

小编典典

大括号扩展, {x..y} 在其他扩展之前执行,因此您不能将其用于可变长度序列。

相反,使用用户声明seq 2 $max的方法。

如果seq您的系统上有可用的命令:

for i in `seq 2 $max`
do
  echo "output: $i"
done

如果没有,则使用穷人的seqwith perl

seq=`perl -e "\$,=' ';print 2..$max"`
for i in $seq
do
  echo "output: $i"
done

注意那些引号。

因此,对于您的示例,它将是:

max=10
for i in `seq 2 $max`
do
    echo "$i"
done
2022-06-01