bash seq替换中的变量({1..10})

时间:2011-05-31 17:20:22

标签: bash seq

是否可以做这样的事情:

start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})

7 个答案:

答案 0 :(得分:49)

在bash中,大括号扩展在变量扩展之前发生,因此这不可能直接实现。

相反,使用算术for循环:

start=1
end=10
for ((i=start; i<=end; i++))
do
   echo "i: $i"
done

输出

i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10

答案 1 :(得分:20)

您应该考虑使用seq(1)。您也可以使用eval:

eval echo {$start..$end}

这里是seq

seq -s' ' $start $end

答案 2 :(得分:8)

您必须使用eval

eval echo {$start..$end}

答案 3 :(得分:7)

如果您没有seq,您可能希望坚持使用普通的for循环

for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""

答案 4 :(得分:2)

我通常只是这样做:

echo `seq $start $end`

答案 5 :(得分:2)

你肯定是BASH吗? ZSH以您想要的方式处理此问题。这在BASH中不起作用,因为大括号扩展发生在任何其他扩展类型之前,例如变量扩展。所以你需要使用另一种方法。

您需要结合大括号和变量扩展的任何特殊原因吗?也许对你的问题采用不同的方法可以避免这种需要。

答案 6 :(得分:0)

使用-s 例如: seq -s''1 10 输出:1 2 3 4 5 6 7 8 9 10