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に似たすべてのシェルがそれをサポートします。word
variable
:
word
何らかの理由で1行に書きたい場合は、次のように1行に書きます。
echo Running:;ps ${user:+-u "$user"}
またはif-then-elseバリアントを使用してください。
echo Running:;if [ -n "$user" ]; do ps -u "$user"; else ps; fi