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`