【问题标题】:Bash Loop Help (want to echo aa, bb, cc)Bash Loop 帮助(想要回显 aa、bb、cc)
【发布时间】:2016-08-01 15:10:32
【问题描述】:

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

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

【问题讨论】:

  • 一般来说,字符对总是相同的吗?如果是这样,带有echo "$i$i" 的单个循环将是显而易见的解决方案。
  • 好吧,我想在两个不同目录中的文件上扩展它。所以我想在 dir1 中打印第一个文件名,然后在 dir2 中打印第一个文件名。然后是 dir1 中的第二个和 dir2 中的第二个。只是想简化一下。
  • 您应该edit您的问题以添加评论中的详细信息。

标签: bash loops for-loop


【解决方案1】:

我建议使用数组来解决您的问题:

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

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

这假设每个目录中的文件数相同。

【讨论】:

  • 谢谢,这是我一直在寻找的。也有助于我使用辅助方法来回显文件名。
【解决方案2】:

只需检查它们是否相同?

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

【讨论】:

  • 谢谢,这也是我最初问题的另一个解决方案。
猜你喜欢
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多