我正在尝试使用文件名的三个一致部分来重命名一系列文件。我决定事先使用$ 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中不可能有三重嵌套循环吗?另外,我的脚本有问题吗?
答案 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}