予期せぬ結果が出ました。
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
ため、そのマニュアルページと正確に一致しない可能性があります。bash
zsh
しかし、これがしないことの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