私は次の解決策を使用しています。コマンドが空の文字列を出力するかどうかをテストする。これらの回避策に加えて、コマンド出力を印刷したい(空でない場合)。
コマンドの出力が空でない場合は、コマンドを一度だけ呼び出してコマンドの出力を印刷できるかどうかを知りたいです。
で同じコマンドを再度呼び出すことでこれを行うことができますが、if condition
結果はすでに存在するため、2回目の呼び出しでCPU使用率がさらに消費される可能性があります。
可能な方法は、同じコマンドが2回呼び出されることです。
if [[ $(ls -A) ]]; then
ls -A
else
echo "no files found"
fi
output=$(git diff --ignore-blank-lines --color-words HEAD | tr -d ' \n\r\t ' | wc -c)
if [ "$output" -gt 0 ]; then
git diff --ignore-blank-lines --color-words HEAD
else
echo "diff is empty"
fi
ベストアンサー1
メモ:この質問はもともとタグ付けされました。強く打つしかし、OPは使用されたシェルがと述べましたzsh
。これにより回答がやや有効になりません。
コマンドの出力を変数に保存し、変数が空であることをテストできます。
output="$(your_command)"
if [[ -n $output ]]
then
printf -- "%s\n" "$output"
else
printf -- "No output\n"
fi
このテストは空でない文字列であることを-n
確認します。$output
では、$output
何が印刷されますか?それ以外の場合は、出力が生成されなかったというメッセージが出力されます。気づく周囲の引用符"$output"
が必要です。
また参考にしてください(@ilkkachuが述べたように)末尾の改行はコマンド置換によって削除されるので、それに興味がある場合は別のアプローチを取る必要があります。