Variables in bash seq replacement ({1..10}) [duplicate]

你离开我真会死。 提交于 2019-11-26 00:55:53

问题


This question already has an answer here:

  • How do I iterate over a range of numbers defined by variables in Bash? 20 answers

Is it possible to do something like this:

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

回答1:


In bash, brace expansion happens before variable expansion, so this is not directly possible.

Instead, use an arithmetic for loop:

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



回答2:


You should consider using seq(1). You can also use eval:

eval echo {$start..$end}

And here is seq

seq -s' ' $start $end



回答3:


You have to use eval:

eval echo {$start..$end}



回答4:


If you don't have seq, you might want to stick with a plain for loop

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



回答5:


I normally just do this:

echo `seq $start $end`



回答6:


Are you positive it has be BASH? ZSH handles this the way you want. This won't work in BASH because brace expansion happens before any other expansion type, such as variable expansion. So you will need to use an alternative method.

Any particular reason you need to combine brace and variable expansion? Perhaps a different approach to your problem will obviate the need for this.




回答7:


use -s ex: seq -s ' ' 1 10 output: 1 2 3 4 5 6 7 8 9 10



来源:https://stackoverflow.com/questions/6191146/variables-in-bash-seq-replacement-1-10

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!