为什么输出是{1..3}
而不是123
?
#!/bin/sh
a=1
for i in {$a..3}
do
echo -n $i
done
如果我更改{$a..3}
为$(echo {$a..3})
,它也不起作用。
大括号扩展在参数替换之前执行。但由于这不是有效的大括号扩展,因此它不会被扩展。改为使用seq
。
伊格纳西奥的回答是正确的。这里有一些其他的解决方案!
您可以在以下位置使用c 样式的 for 循环bash
:
for (( i=a; i<=3; i++ ))
或者您可以使用 dangerous eval
,但您必须确保$a
变量只能是数字,特别是如果用户能够更改它:
for i in $(echo eval {$a..3})
或while
在 pure 中使用变量循环sh
:
i=$a
while [ "$i" -le 3 ]
do
echo -n $i
i=$(( i + 1 ))
done