我已经完成了以下工作:
for i in {2..10} do echo "output: $i" done
它产生一串output: 2, output: 3, 等等。
output: 2
output: 3
但是,尝试运行以下命令:
max=10 for i in {2..$max} do echo "$i" done
产生以下内容:
output: {2..10}
如何让编译器意识到它应该将 $max 视为数组的另一端,而不是字符串的一部分?
大括号扩展, {x..y} 在其他扩展之前执行,因此您不能将其用于可变长度序列。
相反,使用用户声明seq 2 $max的方法。
seq 2 $max
如果seq您的系统上有可用的命令:
seq
for i in `seq 2 $max` do echo "output: $i" done
如果没有,则使用穷人的seqwith perl:
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