0

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

#!/bin/sh

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

如果我更改{$a..3}$(echo {$a..3}),它也不起作用。

4

2 回答 2

3

大括号扩展在参数替换之前执行。但由于这不是有效的大括号扩展,因此它不会被扩展。改为使用seq

于 2013-09-08T05:08:21.307 回答
1

伊格纳西奥的回答是正确的。这里有一些其他的解决方案!

您可以在以下位置使用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
于 2013-09-08T05:49:59.147 回答