bash seqreplace中的variables({1..10})
是否有可能做这样的事情:
start=1 end=10 echo {$start..$end} # Ouput: {1..10} # Expected: 1 2 3 ... 10 (echo {1..10})
在bash中,大括号扩展发生在variables扩展之前,所以这不是直接可能的。
相反,使用循环算术:
start=1 end=10 for ((i=start; i<=end; i++)) do echo "i: $i" done
OUTPUT
i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 i: 8 i: 9 i: 10
你应该考虑使用seq(1)
。 你也可以使用eval:
eval echo {$start..$end}
这里是seq
seq -s' ' $start $end
你必须使用eval
:
eval echo {$start..$end}
如果你没有seq
,你可能想要坚持一个简单的for循环
for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""
你确定它是BASH吗? ZSH以您想要的方式处理。 这在BASH中不起作用,因为在任何其他扩展types(例如可变扩展)之前进行扩展扩展。 所以你需要使用另一种方法。
你需要结合大括号和variables扩展的任何特定原因? 也许对你的问题采取不同的解决方法将会避免这种需要。
使用-s例如:seq -s''1 10输出:1 2 3 4 5 6 7 8 9 10
我通常只是这样做:
echo `seq $start $end`