bash:如何打印diff命令输出?
我想使用diff作为if语句条件,但也要将diff输出到stdout。但是,当我将diff作为条件时,它不会运行命令/显示输出:bash:如何打印diff命令输出?,bash,diff,Bash,Diff,我想使用diff作为if语句条件,但也要将diff输出到stdout。但是,当我将diff作为条件时,它不会运行命令/显示输出: if [ "diff -rq dir1 dir2" != "" ] then echo "there are differences" exit 5 fi 当两个目录有差异时,我想让它输出差异,但它不打印差异,只输出有差异 如果我在If条件的外部运行diff-rq dir1 dir2,它将仅在dir1:xyz.txt中打印。我知道我可以在if语句th
if [ "diff -rq dir1 dir2" != "" ]
then
echo "there are differences"
exit 5
fi
当两个目录有差异时,我想让它输出差异,但它不打印差异,只输出有差异
如果我在If条件的外部运行
diff-rq dir1 dir2
,它将仅在dir1:xyz.txt中打印。我知道我可以在if语句then
中编写命令diff-rq dir1 dir2
,但是有更好的方法吗?您正在比较文本字符串“diff-rq dir1 dir2”和文本字符串“”。显然,这些不匹配,如果
条件满足,您的将运行回显
要实现您想要的功能,请利用diff
在且仅在文件不同时返回非零的事实:
if ! diff -rq dir1 dir2; then
echo "they differ"
exit 5
fi
不要费心比较
diff
的输出是否为空:这不是UNIX的方式。如果[!diff-rq dir1 dir2]写是否正确?我试图把所有的条件都放在括号里,但并不总是有效。@book[
不是shell语法,它只是一个有趣的名称,用于执行简单比较和测试的程序。你可以在/usr/bin中找到它/[
。在这种情况下,您希望运行diff
程序。@book有些人会认为使用[
根本不对!如果您拼写test
,您将避免因相信[
是shell语法的一部分。如果出于某种原因,您不喜欢使用test
并想要一个属于语法一部分的运算符,请使用[[
,但请注意,该运算符的用法未经标准指定。(也就是说,某些shell无法识别它,因此,如果您使用它,您的脚本将限制为那些能够识别它的shell。)