2013-08-01 2 views
1

Я хотел бы иметь функцию петли Баша, как показано ниже, с уменьшением последовательных этапов:как установить переменную для массива петли Баша

for i in {8..2} 
do 
... 
done 

А 8 и 2 могут быть установлен в качестве переменного, например:

start=$1 
end=$2 

for i in {$start..$end} 
do 
... 
done 

Но, похоже, эта доза не работает. Как я могу это сделать?

Спасибо за все быстрые ответы, позже я нашел ответ здесь. descending loop with variable bash

решение:

start=$1 
end=$2 

for i in `seq $start -1 $end` 
do 
... 
done 

Благодаря ~

+1

Спасибо, но одно отличие, мне нужно уменьшить seq как {8..2}, но не {2..8}, а 'seq $ start $ end «Доза не работает. – zhihong

ответ

0

Неа. Но вот обходной путь

start=$1 
end=$2 

for i in $(seq $start $end) 
do 
... 
done 
0

Вы не можете использовать подстановку переменных там, так как {n..m} уже один. Попробуйте использовать seq:

for i in `seq $start $end` 
do 
    ... 
done 

В качестве альтернативы вы могли бы сделать то время цикла увеличивающегося переменным цикла вручную:

i=$start 
while [ $i -lt $end ]; do 
    ... 
    : $[i++] 
done 

Хотя с в то время как вы должны знать, если $start меньше или больше, чем $end

1
$ start=8; end=2; for ((i = start; i >= end; i--)); do echo "${i}"; done 
8 
7 
6 
5 
4 
3 
2 
Смежные вопросы