Ifステートメントは、2つのcmp結果に対して「else」応答を提供します。

Ifステートメントは、2つのcmp結果に対して「else」応答を提供します。

予期せぬ結果が出ました。

COMPARE(){
    if [ ! cmp $IPPATH/ip.old $IPPATH/ip.new >/dev/null 2>&1 ]; then
            echo compare going to create
            CREATE
    else
            echo same
    fi
}

ファイルを比較しようとしていますが、ファイルが同じ場合は何もしませんが(例:display same)、同じでない場合は表示してcompare going to create関数CREATEを実行します。

ただし、sameファイルが同じ場合とまったく同じでない場合は、同じ「」結果が得られます。

以下は正しく表示されます(必要に応じて)。

echo `cat $IPPATH/ip.old`
echo `cat $IPPATH/ip.new`

ベストアンサー1

[テストの文字は、記録されifた種類の評価を実行するようにシェルに指示したことを意味します。man test

[これはほとんどのシェルに組み込まれており、わずかに異なる機能を実装する可能性があるkshため、そのマニュアルページと正確に一致しない可能性があります。bashzsh

しかし、これがしないことの1つは実行です。外部コマンドを発行して結果をテストします。

だから私たちは別の方法で行うことができます。

cmpたとえば、コマンドの出力が空でないことをテストできます。

if [ -n "$(cmp $IPPATH/ip.old $IPPATH/ip.new)" ]
then
  echo different
else
  echo same
fi

あるいは、ラップすることcmpなく元の意図に近い戻りコードを呼び出してテストすることもできます[...]

if ! cmp $IPPATH/ip.old $IPPATH/ip.new > /dev/null 2>&1
then
  echo different
else
  echo same
fi

おすすめ記事