コマンドの出力が空の文字列かどうかをテストし、そうでない場合は結果を印刷します。

コマンドの出力が空の文字列かどうかをテストし、そうでない場合は結果を印刷します。

私は次の解決策を使用しています。コマンドが空の文字列を出力するかどうかをテストする。これらの回避策に加えて、コマンド出力を印刷したい(空でない場合)。

コマンドの出力が空でない場合は、コマンドを一度だけ呼び出してコマンドの出力を印刷できるかどうかを知りたいです。

で同じコマンドを再度呼び出すことでこれを行うことができますが、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が述べたように)末尾の改行はコマンド置換によって削除されるので、それに興味がある場合は別のアプローチを取る必要があります。

おすすめ記事