以下bash脚本可以正常打印1到10之间的数字:
for i in {1..10}
do
echo "$i"
done
但是,如果我想将上限设为变量,则此脚本不起作用。
i=10
for j in {1..$i}
do
echo "$j"
done
有人可以建议如何使第二个脚本工作吗?
答案 0 :(得分:1)
Brace expansion在任何其他扩张之前发生。
你可以说:
for j in $(seq 1 $i); do echo "$j"; done
从上面的链接引用:
支撑扩展在任何其他扩展之前执行,任何扩展 其他扩展特有的字符将保留在结果中。它 严格是文字的。 Bash不适用任何句法解释 在扩展的背景下或大括号之间的文本。至 避免与参数扩展冲突,字符串
‘${’
不是 被认为有资格进行支撑扩张。
答案 1 :(得分:1)
您不能在Bash的{..}
指令中使用变量。像这样使用BASH算术运算符((...))
:
i=10
for ((j=1; j<=i; j++)); do
echo "$j"
done