bash: 你如何打印 diff 命令输出?

bash: how do you print diff command output?

我想将 diff 用作 if 语句条件,但也将 diff 输出到标准输出。但是,当我将 diff 作为条件时,它不会 运行 command/show 输出:

if [ "diff -rq dir1 dir2" != "" ]
then
    echo "there are differences"
    exit 5
fi

我希望它在两个目录有差异时输出差异,但这不会打印出差异而只输出 there are differences

如果我运行 diff -rq dir1 dir2 在if条件之外,它会打印出Only in dir1: xyz.txt例如。我知道我可以在 if 语句 then 中编写命令 diff -rq dir1 dir2 但是有更好的方法吗?

您正在将文字字符串 "diff -rq dir1 dir2" 与文字字符串“”进行比较。显然这些不匹配,您的 if 条件已满足,并且您的 echo 运行。

为了完成你想要的,利用 diff returns 非零当且仅当文件不同的事实:

if ! diff -rq dir1 dir2; then
    echo "they differ"
    exit 5
fi

不要费心比较 diff 的输出是否为空:那不是 UNIX 方式。