Bash - 两个文本文件之间的区别

3
假设有两个文本文件,我需要检查它们是否不同。如果它们不同,我需要对它们进行一些更改,并在终端上显示信息。
这样的操作是否可行?
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} 这个我完全不明白。这是怎么回事?

如果我的问题很基础,我道歉了,但我在其他地方找不到答案。


回复:“我在任何地方都找不到答案。” 显然没有人会向您解释每一行代码,因为这只是浪费时间。如果您不理解语法,请阅读手册:https://www.gnu.org/software/bash/manual/bash.html。 - 4ae1e1
亲爱的4ae1e1,要在谷歌上搜索{#x}真的很难 :-) - Sanjay Manohar
你想要将 DIFF_OUTPUT=( "$(diff new.html old.html)" ) 用于将 DIFF_OUTPUT 变成一个数组,其中包含所有 diff 输出的行作为元素吗? - David C. Rankin
@SanjayManohar 我已经检查过了,在 https://www.gnu.org/software/bash/manual/bash.html 中找到字符串 {#} 一点也不难。总共出现了六次。 - 4ae1e1
你应该使用 [ "${#DIFF_OUTPUT}" -ne 0 ],而不是 !=,因为后者是用于字符串比较的。(这主要是养成好习惯,而不是在这种情况下严格必要的。) - chepner
3个回答

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
第一行将变量DIFF_OUTPUT设置为命令diff new.html old.html的输出/终端结果。
这称为命令替换。您可以使用$()在内联中封装表达式。将其视为将表达式复制到终端并运行它,然后直接将结果粘贴回代码中。
因此,DIFF_OUTPUT现在包含两个文件差异的输出。如果文件相同,则diff不会输出任何内容,因此变量DIFF_OUTPUT将被分配为空字符串。 ${#variable}返回bash中变量的长度。因此,如果文件之间没有区别,则变量(DIFF_OUTPUT)将是一个空字符串-长度为0。因此,${#DIFF_OUTPUT} == "0",这意味着,如果文件有差异,则${#DIFF_OUTPUT} != "0",并且满足您的条件。

1
不幸的是它不叫做“命令行替换”。它叫做“命令替换”。https://www.gnu.org/software/bash/manual/bash.html#Command-Substitution - 4ae1e1
谢谢。已更改。@4ae1e1 - mattkgross

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

第一行将命令diff的输出保存到变量DIFF_OUTPUT中。
${#DIFF_OUTPUT}

这个表达式输出了DIFF_OUTPUT的长度。${#VAR}语法可以计算变量中字符的数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接