是否可以做这样的事情:
start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
答案 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