用变量top-end编写一个bash for-loop

时间:2012-03-19 22:13:01

标签: linux bash unix for-loop

我经常使用众所周知的语法在bash中编写for循环:

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

现在,我正在尝试编写一个顶部由变量定义的地方:

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

我尝试了各种各样的parens,花括号,评估等,并且通常会收到错误的“错误替换”。

如何编写for-loop以使限制取决于变量而不是硬编码值?

3 个答案:

答案 0 :(得分:28)

您可以像这样使用for循环来迭代变量$TOP

for ((i=1; i<=$TOP; i++))
do
   echo $i
   # rest of your code
done

答案 1 :(得分:9)

如果你有一个gnu系统,你可以使用seq生成各种序列,包括这个。

for i in $(seq $TOP); do
    ...
done

答案 2 :(得分:2)

答案部分为there:请参阅示例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[@]})