{$ a..3}无法在shell脚本中展开

时间:2013-09-08 05:06:49

标签: bash shell

为什么输出为{1..3}而不是123

#!/bin/sh

a=1
for i in {$a..3}
do
    echo -n $i
done

如果我将{$a..3}更改为$(echo {$a..3}),则它也无效。

2 个答案:

答案 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