Bash循环帮助(想要回显aa,bb,cc)

时间:2016-08-01 15:10:32

标签: bash loops for-loop

循环逻辑总是让我困惑,这可能是一个简单的解决方案。我目前的循环:

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个。只是试图简化并首先理解逻辑。

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