bash - 两个文本文件之间的差异

时间:2015-11-14 02:32:01

标签: bash shell

我们说有两个文本文件,我需要检查它们是否不同。 如果是,我需要对它们进行一些更改并在终端上显示信息。

这样的事情会起作用吗?

diff file1.txt file2.txt > difference.txt

if [ -s difference.txt ]
then
    .....
else
    .....
fi

我也试图在bash中找到其他一些写这个的方法,我发现了这段代码:

  DIFF_OUTPUT="$(diff new.html old.html)"
  if [ "0" != "${#DIFF_OUTPUT}" ]; then

但我不太明白。 我想在第一行我们创建一个变量DIFF_OUTPUT,就像我的代码中的difference.txt一样? 然后就是这样     $ {#DIFF_OUTPUT} 我根本不懂。这里发生了什么?

如果我的问题很基本,我很抱歉,但我无法在其他任何地方找到答案。

3 个答案:

答案 0 :(得分:2)

如果文件不同,

diff的退出状态为1。

diff file1.txt file2.txt > difference.txt
status=$?

case $status in
    0) echo "Files are the same"
       # more code here
       ;;
    1) echo "Files are different"
       # more code here
       ;;
    *) echo "Error occurred: $status"
       # more code here
       ;;
esac

如果您不关心错误,那么只需检查零与非零条件:

if diff file1.txt file2.txt > difference.txt; then
    # exit status was 0, files are the same
else
    # exit status was > 0, files are different or an error occurred
fi

答案 1 :(得分:1)

第一行设置变量DIFF_OUTPUT作为命令diff new.html old.html的输出/终端结果。

这称为命令替换。您可以使用$()以内联方式封装表达式。可以把它想象成将表达式复制到终端并运行它,然后将结果直接粘贴回代码中。

因此,DIFF_OUTPUT现在包含两个文件的diff的输出。如果文件相同,则diff将不输出任何内容,因此变量DIFF_OUTPUT将被分配一个空字符串。

${#variable}返回bash中变量的长度。因此,如果文件之间没有差异,则变量(DIFF_OUTPUT)将是一个空字符串 - 其长度为0.因此,${#DIFF_OUTPUT} == "0",意味着,如果存在差异,文件${#DIFF_OUTPUT} != "0"和您的条件得到满足。

答案 2 :(得分:1)

  DIFF_OUTPUT="$(diff new.html old.html)"

第一行将命令diff的输出保存到变量DIFF_OUTPUT。

${#DIFF_OUTPUT}

,此表达式输出DIFF_OUTPUT的长度。 $ {#VAR}语法将计算变量中的字符数

相关问题