嵌套用于循环的bash shell
我想编写一个嵌套for循环,该循环必须在bashshell提示符下工作。在单行命令中嵌套for循环 比如说,嵌套用于循环的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 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