Linux 编写具有可变顶端的bash for循环
我经常使用众所周知的语法在bash中编写for循环:Linux 编写具有可变顶端的bash for循环,linux,bash,unix,for-loop,Linux,Bash,Unix,For Loop,我经常使用众所周知的语法在bash中编写for循环: for i in {1..10} [...] 现在,我正在尝试编写一个函数,其中top由一个变量定义: TOP=10 for i in {1..$TOP} [...] 我试过各种各样的括号、花括号、求值等等,通常都会返回一个错误“糟糕的替换” 如何编写for循环,以使限制取决于变量而不是硬编码的值?您可以使用类似这样的for循环来迭代变量$TOP: for ((i=1; i<=$TOP; i++)) do echo $i
for i in {1..10} [...]
现在,我正在尝试编写一个函数,其中top由一个变量定义:
TOP=10
for i in {1..$TOP} [...]
我试过各种各样的括号、花括号、求值等等,通常都会返回一个错误“糟糕的替换”
如何编写for循环,以使限制取决于变量而不是硬编码的值?您可以使用类似这样的for循环来迭代变量
$TOP
:
for ((i=1; i<=$TOP; i++))
do
echo $i
# rest of your code
done
for((i=1;i如果您有gnu系统,您可以使用seq
生成各种序列,包括此序列
for i in $(seq $TOP); do
...
done
答案部分是:参见示例11-12。循环的C样式
下面是一个总结,但请注意问题的最终答案取决于您的bash解释器(/bin/bash--version):
标准语法。
对于12345678910中的a
#使用“seq”。。。
对于序号10中的a`
#使用大括号展开。。。
#Bash,版本3+。
对于{1..10}中的a
#使用类似C的语法。
限值=10
for((a=1;aseq
不建议超过大括号扩展。bsd/gnu之间的行为并不完全相同。@当大括号扩展是可行的替代方案时,值得注意的是daenyth,但这个问题的关键是大括号扩展不适用于可变边界。可能重复
# 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[@]})