Bash:可能有三层嵌套循环吗?

时间:2018-09-11 19:02:33

标签: bash

我正在尝试使用文件名的三个一致部分来重命名一系列文件。我决定事先使用$ echo进行测试;

for i in {No_,Us_,Ca_,G1_,G2_}
do
    for j in {R,L}
    do
        for n in `seq 1 6`
        do
            echo $i$j$n
        done
    done
done

这不起作用。在第二个do之后将其发送到终端时,它将在当前目录中打印文件名。它也不会返回任何输出。

但是,双嵌套循环可以很好地工作;

for i in {No_,Us_,Ca_,G1_,G2_}
do
  for j in `seq 1 6`
  do
    echo $i$j
done
done

bash中不可能有三重嵌套循环吗?另外,我的脚本有问题吗?

1 个答案:

答案 0 :(得分:5)

  

第二个do之后,它将在当前目录中打印文件名。

可能是您使用选项卡缩进了脚本并将其复制粘贴到了终端中吗?在终端中按 tab 开始完成。通常,复制粘贴选项卡的工作就像您自己按下选项卡一样。在许多情况下,完成功能会列出当前目录的内容。

在一行中输入命令,然后重试:

for i in {No_,Us_,Ca_,G1_,G2_}; do for j in {R,L}; do for n in `seq 1 6`; do echo $i$j$n; done; done; done

顺便说一句,您的命令可以写为

for i in {No_,Us_,Ca_,G1_,G2_}{R,L}{1..6}; do echo "$i"; done

甚至

printf '%s\n' {No,Us,Ca,G1,G2}_{R,L}{1..6}