変数のコマンド出力と標準出力の抑制

変数のコマンド出力と標準出力の抑制
time=$(TIMEFORMAT="%R"; { time /usr/bin/time -f "\n%E elapsed" curl -s "https://example.com"; } 2>&1)

ElapsedTime=$(echo "$time" | tail -c 23)

上記のコマンドは期待どおりに機能しますが、echoが標準出力として印刷されることは望ましくありません。変数に値を割り当てたい。

ベストアンサー1

第1の割り当てと第2の割り当てとの間に差はなく、var=$(echo foo)標準出力に関する限り差はない。

2番目のガイドラインでは、次のことを行います。

ElapsedTime=$(echo "$time" | tail -c 23)

コマンド標準出力(つまりパイプで接続された標準出力、この場合はtailstdout)は変数contentといいえ画面に表示されます。

一方、内部コマンドの1つが標準エラーストリームに何かを出力する場合、stderrをリダイレクトしないため、画面に表示されます。

これはecho "$time"信頼できません。printf "%s\n" "$time"予期しない値の副作用を避けることをお勧めしますtime

tail -c -numberPOSIXなので、このコマンドが失敗したくありません。

おすすめ記事