问题
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