我正在尝试使用名称的三个一致部分重命名一系列文件。我决定事先使用$ 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}