BASH - 使用文件名在for循环中获取下一个元素

时间:2017-10-10 05:42:23

标签: bash shell

我正在尝试比较所有文件对之间的差异。但是,为了比较文件对,我需要能够访问for循环中当前元素之后的元素。这是我目前的代码 -

#!/bin/bash
for file in $(find -type f); do
   b = $(file+1) -- I know this is not the correct way to access the next element
   diff $(file) $(b) >/dev/null
   if [ #? -eq 0 ]
      echo $(file) and $(b) are the same
   else
      echo $(file) and $(b) are not the same
   fi
done

非常感谢任何有关访问下一个元素的方法的帮助。

1 个答案:

答案 0 :(得分:1)

您可以访问前一个元素而不是下一个元素:存储迭代的当前文件名,并在下一个中重复使用它。类似的东西:

#!/usr/env/bin bash

declare previous=""

for file in $(find -type f); do
  if [[ -n $previous ]]; then
    if diff --brief "${previous}" "${file}" > /dev/null; then
      echo "${previous} and ${file} are the same"
    else
      echo "${previous} and ${file} are not the same"
    fi
  fi
  previous="${file}"
done

注意:如果你真的想要包含变量名,请使用花括号(如上面的代码所示),而不是括号(如代码中所示):${file}计算为变量{{1}的值while file在没有参数的情况下调用command $(file),并返回错误消息。