为什么输出为{1..3}
而不是123
?
#!/bin/sh
a=1
for i in {$a..3}
do
echo -n $i
done
如果我将{$a..3}
更改为$(echo {$a..3})
,则它也无效。
答案 0 :(得分:3)
在参数替换之前执行括号扩展。但由于这不是一个有效的支撑扩展,它不会扩展。请改用seq
。
答案 1 :(得分:1)
Ignacio's answer是对的。 以下是其他一些解决方案!
您可以在bash
中使用c-style for-loop:
for (( i=a; i<=3; i++ ))
或者你可以使用危险的eval
,但你必须确保$a
变量不能是数字,除非是数字,特别是如果用户能够更改它:
for i in $(echo eval {$a..3})
或while
循环使用纯sh
中的变量:
i=$a
while [ "$i" -le 3 ]
do
echo -n $i
i=$(( i + 1 ))
done