diff
2つのファイルを比較して何も返さない場合は、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 [ $(diff
vsを使用する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
スクリプトが実行されます(おそらくではありません)。この機能を使用するには、実際にスクリプトを実行していることを確認する必要があります。sh
zsh
zsh
zsh