bash 中的差异命令

Diff command in bash

每次我 运行 以下 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

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

谢谢!

简答:使用

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

是达到预期结果的一种可能方式。

你的命令

$(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 实用程序来比较已排序文件中的行。