2016-08-01 45 views
0

循环逻辑总是让我困惑,这可能是一个简单的解决方案。我现在的循环:Bash Loop帮助(想要回显aa,bb,cc)

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中的第二个和在dir2中的第二个。试图简化并首先理解逻辑。

+0

一般情况下,字符对总是一样吗?如果是这样,带'echo“$ i $ i”''的单个循环将是明显的解决方案。 –

+0

那么我想扩展这两个不同的目录中的文件。所以我想在dir1中打印第一个文件名,然后在dir2中打印第一个文件名。然后在dir1中的第二个和在dir2中的第二个。试图简化这一点。 – kkd92

+1

您应该[编辑]您的问题以添加评论中的详细信息。 –

回答

6

我会建议使用阵列来解决问题:

dir1_files=(dir1/*) 
dir2_files=(dir2/*) 

for ((i = 0; i < ${#dir1_files[@]}; ++i)); do 
    echo "${dir1_files[i]} ${dir2_files[i]}" 
done 

这是假设文件在每个目录的数量是一样的。

+0

谢谢,这是最符合我寻找的路线。也有助于我的第二种方法来回显文件名。 – kkd92

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 
+0

谢谢,这也是我最初的问题的另一种解决方案。 – kkd92