Написание цикла bash for с переменной top-end - PullRequest
13 голосов
/ 20 марта 2012

Я часто пишу циклы for в bash с хорошо известным синтаксисом:

for i in {1..10}  [...]

Теперь я пытаюсь написать тот, где вершина определяется переменной:

TOP=10
for i in {1..$TOP} [...]

Я испробовал множество скобок, фигурных скобок, оценок и т. Д., И обычно получаю сообщение об ошибке «неправильная замена».

Как мне написать цикл for, чтобы предел зависел от переменной, а не от жестко заданного значения?

Ответы [ 3 ]

28 голосов
/ 20 марта 2012

Вы можете использовать цикл for, как этот, для итерации с переменной $TOP:

for ((i=1; i<=$TOP; i++))
do
   echo $i
   # rest of your code
done
9 голосов
/ 20 марта 2012

Если у вас есть система GNU, вы можете использовать seq для генерации различных последовательностей, включая эту.

for i in $(seq $TOP); do
    ...
done
2 голосов
/ 20 марта 2012

Ответ частично там : см. Пример 11-12.C-стиль для цикла .

Вот краткое изложение, но учтите, что окончательный ответ на ваш вопрос зависит от вашего интерпретатора bash ( / bin / bash --version ):

# Standard syntax.
for a in 1 2 3 4 5 6 7 8 9 10

# Using "seq" ...
for a in `seq 10`

# Using brace expansion ...
# Bash, version 3+.
for a in {1..10}

# Using C-like syntax.
LIMIT=10
for ((a=1; a <= LIMIT ; a++))  # Double parentheses, and "LIMIT" with no "$".

# another example
lines=$(cat $file_name | wc -l)
for i in `seq 1 "$lines"`

# An another more advanced example: looping up to the last element count of an array :
for element in $(seq 1 ${#my_array[@]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...