web-dev-qa-db-ja.com

diff内の2つの同一ファイルによるサイレント結果:それらを表示する方法?

-sパラメータを設定すると、diffも異なるファイルを出力します。

diff -s $FIRST_FILE $SECOND_FILE
3
FezZ

考えられる解決策の1つは次のとおりです。

diff -s $FIRST_FILE $SECOND_FILE > /dev/null
if [ $? -eq 0 ]; then
    echo "The files are identical"
fi

注:質問のテキストが変更されました。

Unixの哲学は、ジョブごとに1つのツールを用意し、シェルでそれらを結合することです。つまり、比較する1つのツールと、目的の出力形式を取得する1つのツールです。

この場合、出力形式は非常に単純なので、この部分をシェルで直接実行できます。

2つのファイルを比較するために、それらが同じ内容であるかどうかだけに関心があり、違いをリストすることに関心がない場合は、 cmp を使用します。

if cmp -s -- "$FIRST_FILE" "$SECOND_FILE"; then
  printf '%s\n' "$FIRST_FILE = $SECOND_FILE"
fi

デフォルトでは、diffは同一のファイルが指定された場合は何も表示しません。これが、-sが変更する動作の唯一の側面です。したがって、常にファイルを比較し、違いを出力します。 -sを使用すると、ファイルが同一の場合にもメッセージが出力されます。-sを使用しない場合は、同一のファイルについてはまったく言及されません。

-q-sを組み合わせることで、私が探していると思う動作を得ることができます。 -qdiffに、ファイルが異なる場合(異なる場合)のみを示し、違いを詳しく説明しないように指示します。

次に例を示します。

$ 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
3
Stephen Kitt

ファイル名を引用符で囲みました。ファイル名も小文字に変更する必要があります。

diff "${FIRST_FILE}" "${SECOND_FILE}" > /dev/null && echo "Same"
0
Walter A