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 中不可能有三重嵌套循环吗?或者,我的脚本有问题吗?

第二个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 '%sn' {No,Us,Ca,G1,G2}_{R,L}{1..6}

最新更新