我们说有两个文本文件,我需要检查它们是否不同。 如果是,我需要对它们进行一些更改并在终端上显示信息。
这样的事情会起作用吗?
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} 我根本不懂。这里发生了什么?
如果我的问题很基本,我很抱歉,但我无法在其他任何地方找到答案。
答案 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}语法将计算变量中的字符数