开发者

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

开发者 https://www.devze.com 2023-03-09 07:03 出处:网络
This question already has answers here: 开发者_JS百科 How do I iterate over a range of numbers defined by variables in Bash?
This question already has answers here: 开发者_JS百科 How do I iterate over a range of numbers defined by variables in Bash? (20 answers) Closed 5 years ago.

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})


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


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

eval echo {$start..$end}

And here is seq

seq -s' ' $start $end


You have to use eval:

eval echo {$start..$end}


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 ""


I normally just do this:

echo `seq $start $end`


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.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消