この終了コードベースの条件文が予期したものと反対になるのはなぜですか? [コピー]

この終了コードベースの条件文が予期したものと反対になるのはなぜですか? [コピー]

スクリプトはtest.sh

#!/bin/sh

if cmp -s file.a file.b; then
  echo diff
else
  echo same
fi

終了コードを確認すると、次のcmp -sようになります。

いつfile.afile.b違うのか。

cmp -s file.a file.b
echo $?
1

いつfile.afile.b同じです。

cmp -s file.a file.b
echo $?
0

では、条件文がその逆のように見えるのはなぜですか?

いつfile.afile.b違うのか。

./test.sh
same

いつfile.afile.b同じです。

./test.sh
diff

こんなことが起きているのを見たのは今回が初めてではありません。その文が終了コードを解釈する方法を誤解しているようですif。あるいは、まったく終了コードではないかもしれません。

関連情報