循环逻辑总是让我困惑,这可能是一个简单的解决方案。我目前的循环:
for i in a b; do for j in a b; do echo $i$j; done; done
此循环打印以下输出:
aa
ab
ba
bb
我希望它只打印:
aa
bb
我只是希望它匹配前两个字母,然后是后两个字母,依此类推。最终我想在两个不同的目录中扩展它。所以我想在dir1中打印第一个文件名,然后在dir2中打印第一个文件名。然后是dir1中的第2个和dir2中的第2个。只是试图简化并首先理解逻辑。
答案 0 :(得分:6)
我建议使用数组来解决你的问题:
dir1_files=( dir1/* )
dir2_files=( dir2/* )
for (( i = 0; i < ${#dir1_files[@]}; ++i )); do
echo "${dir1_files[i]} ${dir2_files[i]}"
done
这假设每个目录中的文件数相同。
答案 1 :(得分:1)
请检查它们是否相同?
for i in a b; do
for j in a b; do
if [[ "$i" = "$j" ]]; then
echo $i$j
fi
done
done
或者:
for i in a b; do for j in a b; do [[ "$i" = "$j" ]] && echo $i$j; done; done