コマンドの結果がzsh ifステートメントに出力されたかどうかを確認するには?

コマンドの結果がzsh ifステートメントに出力されたかどうかを確認するには?

diff2つのファイルを比較して何も返さない場合は、echo "no diff"違いを示したいと思います。現在、ifステートメントは違いがない場合にのみ機能しますが、違いがあると「見つかりません」というエラーが発生します。

test.shは次のようになります。

#!/bin/zsh
if [$(diff file1 file2) = '']
then
    echo "no diff"
else
    diff file1 file2
fi

ファイルが同じ場合:

$ sh test.sh
no diff

ファイルが異なる場合:

$ cat file1
hello

$ cat file2
goodbye

$ sh test.sh
test.sh: 1: test.sh: [1,8c1,8: not found
< hello
---
> goodbye

解決策の検索中に空白if [ $(diffvsを使用するif [$(diffことに違いがあり、単一=vsを使用する==のも役に立ちます。問題は、私が出力をテストしていることです''(何もありません)。動作しますが、「見つかりません」行がそこに属していません。私はその迷惑な行を削除したくないので、ifステートメントを正しい方法で実行します。なぜなら、2回実行しなくても必要な結果を得る方法があるからですdiff

答え1

diff違いが見つからない場合はゼロ終了ステータスを提供するため、diff一度だけ使用し、必要に応じてメッセージを出力します。

if diff file1 file2; then
    echo 'no diff'
fi

  • diffユーティリティには-s/ --report-identical-files(POSIX仕様拡張)オプションがあります。これにより、コマンドは次のように単純化されます。

    diff -s file1 file2
    
  • エラーの原因は[1,8c1,8: not found構文エラーです。[有効な式と終了パラメータとともに単独で表示する必要があります]。使用方法に関する情報testは unix.stackexchange(協会 協会 協会) & マニュアルページでman 1 test&man 1p test

  • test.sh最初の行はですが、その後はインタプリタを使用して#!/bin/zshスクリプトが実行されます(おそらくではありません)。この機能を使用するには、実際にスクリプトを実行していることを確認する必要があります。shzshzshzsh

関連情報