bash中的Diff命令

时间:2015-05-31 15:43:00

标签: bash diff

每次运行以下bash命令时,都会出错:

以下是代码:

sort -b ./tests/out/$scenario > $studentFile
sort -b ./tests/out/$scenario > $profFile
$(diff $studentFile $profFile)
  if [ $? -eq 0 ]
      then 
          echo "Files are equal!"
      else
          echo "Files are different!"
      fi

这是错误:

./test.sh: 2c2: not found

我基本上想要对两个文件进行排序,然后检查它们是否相等。我不明白的是这个错误意味着什么以及我如何摆脱它。任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:5)

简短回答:使用

diff $studentFile $profFile

而不是:

$(diff $studentFile $profFile)

答案很长:

diff $studentFile $profFile 

将提供多行的输出,在您的示例中,第一行是" 2c2"。如果将diff命令括在$()中,则此表达式的结果为" 2c2 ..."。这个结果现在由bash作为新命令使用,结果为"命令未找到:2c2"。

比较,例如:

$(diff $studentFile $profFile)

echo $(diff $studentFile $profFile)

*附录*

if diff $studentFile $profFile > /dev/null 2>&1
then
  echo "equal files"
else
  echo "different files"
fi

答案 1 :(得分:2)

你的命令

$(diff $studentFile $profFile)

执行在两个文件上运行diff命令的结果。你的shell抱怨的2c2可能是diff输出中的第一个单词。

我假设您只想查看diff的输出:

diff $studentFile $profFile

如果要在脚本中比较文件是否相等,请考虑使用cmp

if cmp -s $studentFile $profFile; then
    # Handle file that are equal
else
    # Handle files that are different
fi

diff实用程序用于检查文件之间的差异,而cmp更适合于简单地测试文件是否不同(例如,在脚本中)。

对于更专业的案例,有comm实用程序可以比较已排序文件中的行。