Ответ 1
Вы можете использовать для цикла, как это, для итерации с переменной $TOP
:
for ((i=1; i<=$TOP; i++))
do
echo $i
# rest of your code
done
Я часто пишу для циклов в bash с хорошо известным синтаксисом:
for i in {1..10} [...]
Теперь я пытаюсь написать тот, где вершина определяется переменной:
TOP=10
for i in {1..$TOP} [...]
Я пробовал различные парсеры, фигурные скобки, оценки и т.д., и, как правило, возвращал ошибку "плохая замена".
Как я могу написать мой цикл for, чтобы предел зависел от переменной вместо жестко заданного значения?
Вы можете использовать для цикла, как это, для итерации с переменной $TOP
:
for ((i=1; i<=$TOP; i++))
do
echo $i
# rest of your code
done
Если у вас есть система gnu, вы можете использовать seq
для генерации различных последовательностей, включая это.
for i in $(seq $TOP); do
...
done
Ответ отчасти там: см. пример 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[@]})