変数が存在する場合にフラグを追加するパッド

変数が存在する場合にフラグを追加するパッド

bashの知識を向上させ、コードをより体系的にすることを試みています。

ここでやりたいことは、変数が存在する場合にのみ$ user変数に-uフラグを追加し、それ以外の場合は-uフラグを参照しないことです。

これが私が試したことです。

echo "Running: ps if [[ -n "$user"]]; then -u $user fi | wc -l" 

$ userが存在する場合は、$ userが所有しているプロセスの数を印刷します。

ただし、$ userが存在しない場合は、ユーザー全体のスループットのみが表示されます。

(エコー内で)これが必要であることを覚えておくことが重要です。

答え1

echoこの場合は必要ではなく、echo場合によってはデータが変更される可能性があるため、出力変数データを使用しないでください。なぜprintfがechoより優れているのですか?)。また、コマンドの置き換えが必要なため、シェルが一時的にps出力をメモリに保持する必要があるため、あまりエレガントです。

代わりに、読みやすいように次のようなコードを書くことができます。

echo Running:
if [ -n "$user" ]; do
    ps -u "$user"
else
    ps
fi

または、読み取れない塊に圧縮し始めるには、

echo Running:
ps ${user:+-u "$user"}

変数が設定されていて空でない場合、拡張は${variable:+word}に拡張されます。変数を設定すると、削除対象は次にのみ拡張されます(空になる可能性があります)。この拡張は標準なので、POSIXに似たすべてのシェルがそれをサポートします。wordvariable:word

何らかの理由で1行に書きたい場合は、次のように1行に書きます。

echo Running:;ps ${user:+-u "$user"}

またはif-then-elseバリアントを使用してください。

echo Running:;if [ -n "$user" ]; do ps -u "$user"; else ps; fi

関連情報