简体   繁体   English

bash shell 嵌套 for 循环

[英]bash shell nested for loop

I want to write a nested for loop that has to work in the bash shell prompt.我想编写一个嵌套的 for 循环,它必须在 bash shell 提示符下工作。 nested for loop in Single line command.在单行命令中嵌套 for 循环。

For example,例如,

for i in a b; do echo $i; done
a
b

In the above example, for loop is executed in a single line command right.在上面的例子中,for 循环在单行命令中执行。 Like this I have tried the nested for loop in the shell prompt.像这样,我在 shell 提示中尝试了嵌套的 for 循环。 Its not working.它不工作。 How to do this.如何做到这一点。 Please update me on this.请更新我。

The question does not contain a nested loop, just a single loop.该问题不包含嵌套循环,仅包含一个循环。 But THIS nested version works, too:但是这个嵌套版本也有效:

# for i in c d; do for j in a b; do echo $i $j; done; done
c a
c b
d a
d b

One one line (semi-colons necessary):一行一行(需要分号):

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

Formatted for legibility (no semi-colons needed):格式化为易读性(不需要分号):

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

There are different views on how the shell code should be laid out over multiple lines;关于 shell 代码应该如何在多行上布局存在不同的看法; that's about what I normally use, unless I put the next operation on the same line as the do (saving two lines here).这就是我通常使用的内容,除非我将下一个操作与do放在同一行(此处保存两行)。

#!/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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM