当我设置-s
参数时,diff
也打印不同的文件。
diff -s $FIRST_FILE $SECOND_FILE
答案1
Unix 的理念是每项工作都有一个工具,而 shell 将它们粘合在一起。因此:一种用于比较的工具,一种用于获得所需输出格式的工具。
在这种情况下,输出格式非常简单,这部分可以直接使用 shell 完成。
要比较两个文件,如果您只关心它们是否具有相同的内容而不是列出差异,请使用cmp
。
if cmp -s -- "$FIRST_FILE" "$SECOND_FILE"; then
printf '%s\n' "$FIRST_FILE = $SECOND_FILE"
fi
答案2
一种可能的解决方案可能是:
diff -s $FIRST_FILE $SECOND_FILE > /dev/null
if [ $? -eq 0 ]; then
echo "The files are identical"
fi
注意:它更改了问题文本。
答案3
默认情况下,diff
当给出相同的文件时,保持沉默;这是其行为唯一发生变化的方面-s
。所以它总是比较文件,并输出差异; with-s
它还会在文件相同时输出一条消息, without-s
它根本不会提及相同的文件。
-q
您可以通过组合和来获得我认为您正在寻找的行为-s
;-q
指示diff
仅指示文件不同(当文件不同时),而不详细说明差异。
这是一个例子:
$ echo 1 > a
$ echo 2 > b
$ echo 2 > c
$ diff -qs a b
Files a and b differ
$ diff -qs b c
Files b and c are identical
答案4
我在文件名两边加了引号,您还应该将文件名更改为小写。
diff "${FIRST_FILE}" "${SECOND_FILE}" > /dev/null && echo "Same"