bash shell嵌套for循环

ras*_*hok 27 bash shell nested-loops

我想编写一个嵌套的for循环,它必须在bash shell提示符下工作.在单行命令中嵌套for循环.

例如,

for i in a b; do echo $i; done
a
b
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,for循环在单行命令中执行.像这样我在shell提示符中尝试了嵌套的for循环.它不起作用.这该怎么做.请告诉我这个.

Dan*_*iel 37

这不是嵌套循环,只是一个循环.嵌套版本也可以使用:

# for i in a b; do for j in a b; do echo $j; done; done
a
b
a
b
Run Code Online (Sandbox Code Playgroud)

  • @ashok:这个错误可能意味着你错过了某个地方的`do`. (2认同)

Jon*_*ler 34

一行(需要半冒号):

for i in 0 1 2 3 4 5 6 7 8 9; do for j in 0 1 2 3 4 5 6 7 8 9; do echo "$i$j"; done; done
Run Code Online (Sandbox Code Playgroud)

格式化易读性(不需要分号):

for i in 0 1 2 3 4 5 6 7 8 9
do
    for j in 0 1 2 3 4 5 6 7 8 9
    do 
        echo "$i$j"
    done
done
Run Code Online (Sandbox Code Playgroud)

关于如何在多行上布置shell代码有不同的看法; 这是关于我通常使用的内容,除非我将下一个操作放在同一行do(这里保存两行).

  • @SummerEla:你可以`$(seq 0 9)`; 在Bash中,你也可以在{0..9}中为我写'.有很多方法可以使用.不使用`seq`的优点是它可以节省进程(其中11个).您不太可能发现这是一个问题,但这是使用其中一种替代符号(答案中的那个或支撑扩展)的名义上的原因.请注意,大括号扩展不是很灵活 - 也没有写出的数字列表.`seq`表示法允许您使用可变限制来控制范围.这一切都取决于你所追求的. (2认同)

小智 5

#!/bin/bash
# loop*figures.bash

for i in 1 2 3 4 5  # First loop.
do
    for j in $(seq 1 $i)
    do
        echo  -n "*" 
    done
    echo 
done
echo
# outputs
# *
# **
# ***
# ****
# *****

for i in 5 4 3 2 1 # First loop.
do
    for j in $(seq -$i -1)
    do
        echo  -n "*" 
    done
    echo 
done

# outputs
# *****
# ****
# ***
# **
# *

for i in 1 2 3 4 5  # First loop.
do
    for k in $(seq -5 -$i)
    do
        echo -n ' '
    done
    for j in $(seq 1 $i)
    do
        echo  -n "* " 
    done
    echo 
done
echo

# outputs
#     * 
#    * * 
#   * * * 
#  * * * * 
# * * * * * 

for i in 1 2 3 4 5  # First loop.
do
    for j in $(seq -5 -$i)
    do
        echo  -n "* " 
    done
    echo 
    for k in $(seq 1 $i)
    do
        echo -n ' '
    done
done
echo

# outputs
# * * * * * 
#  * * * * 
#   * * * 
#    * * 
#     *


exit 0
Run Code Online (Sandbox Code Playgroud)

  • 除代码外,请提供一些解释。 (4认同)