Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 编写具有可变顶端的bash for循环_Linux_Bash_Unix_For Loop - Fatal编程技术网

Linux 编写具有可变顶端的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

我经常使用众所周知的语法在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
   # 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;a
seq
不建议超过大括号扩展。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[@]})