Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
嵌套用于循环的bash shell_Bash_Shell_Nested Loops - Fatal编程技术网

嵌套用于循环的bash shell

嵌套用于循环的bash shell,bash,shell,nested-loops,Bash,Shell,Nested Loops,我想编写一个嵌套for循环,该循环必须在bashshell提示符下工作。在单行命令中嵌套for循环 比如说, for i in a b; do echo $i; done a b 在上面的示例中,for循环在单行命令right中执行。 像这样,我在shell提示符中尝试了嵌套for循环。它不起作用。 如何做到这一点。请告诉我最新情况。问题不包含嵌套循环,只包含一个循环。但是这个嵌套版本也可以工作: # for i in c d; do for j in a b; do echo $i $j;

我想编写一个嵌套for循环,该循环必须在bashshell提示符下工作。在单行命令中嵌套for循环

比如说,

for i in a b; do echo $i; done
a
b
在上面的示例中,for循环在单行命令right中执行。 像这样,我在shell提示符中尝试了嵌套for循环。它不起作用。
如何做到这一点。请告诉我最新情况。

问题不包含嵌套循环,只包含一个循环。但是这个嵌套版本也可以工作:

# 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
一行(需要分号):

格式清晰(无需分号):


对于shell代码应该如何在多行上布局,存在不同的观点;这就是我通常使用的方法,除非我将下一个操作放在与
do
相同的行上(在这里保存两行)。

-bash-3.00#对于a b中的I;不要重复$i;在上面我提到的评论中做了一个b-bash-3.00#来代表新线。。。命令是“a b中的i;do echo$i;done”,请编辑您的问题,不要添加此类注释。我编辑以突出显示代码…说“它不工作”没有传达任何信息。这种行为与你期望的有什么不同?您收到了什么错误消息?你试过什么?我已经试过了。。。我得到错误。。。“意外标记“echo”附近出现语法错误…”。。。我在bash中尝试这个…我在bash中尝试过。。。你用的是哪个外壳?至少你把这个问题标记为“bash”,所以应该很清楚。@ashok:这个错误可能意味着你在某个地方缺少了一个
do
。谢谢大家。。。它的工作很好。。。我在do之后用了分号。。。所以我得到了那个错误…这怎么不是一个嵌套循环?在一行或多行中没有区别。为什么不在$(seq 0 9)中为i做一些类似的事情,而不是在序列中写出每个数字呢?@SummerEla:你可以
$(seq 0 9)
;在Bash中,您也可以在{0..9}中为i编写
。有很多方法可以使用。不使用
seq
的优点是可以节省进程(其中11个)。您不太可能发现这是一个问题,但这是使用一种替代符号(答案中的符号或支架展开)的名义原因。请注意,大括号扩展不是很灵活,写出的数字列表也不是很灵活。
seq
符号允许您使用可变限制控制范围。这完全取决于你在追求什么。请在代码之外提供一些解释。你是救世主:)
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
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
#!/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