コマンドが空の文字列を出力するかどうかをテストするにはどうすればよいですか?
ベストアンサー1
以前、ディレクトリ内にファイルがあるかどうかを確認する方法を尋ねました。次のコードでそれが実現できますが、rspの回答より良い解決策のために。
空の出力
コマンドは値を返すのではなく、出力します。この出力を取得するには、コマンド置換; 例$(ls -A)
: Bash で空でない文字列をテストするには、次のようにします。
if [[ $(ls -A) ]]; then
echo "there are files"
else
echo "no files found"
fi
シンボリックな現在の ( ) および親 ( ) ディレクトリ エントリを省略するため、-A
ではなくを使用していることに注意してください。-a
.
..
注:コメントで指摘されているように、コマンド置換では末尾の改行はキャプチャされません。したがって、コマンドが改行のみを出力する場合、置換では何もキャプチャされず、テストは false を返します。非常にまれですが、上記の例では、単一の改行が有効なファイル名であるため、これは可能です。詳細については、この答え。
終了コード
コマンドが正常に完了したかどうか確認したい場合は、 を検査します$?
。これには、最後のコマンドの終了コード (成功の場合は 0、失敗の場合は 0 以外) が含まれます。例:
files=$(ls -A)
if [[ $? != 0 ]]; then
echo "Command failed."
elif [[ $files ]]; then
echo "Files found."
else
echo "No files found."
fi
より詳しい情報ここ。