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)
コマンド標準出力(つまりパイプで接続された標準出力、この場合はtail
stdout)は変数contentといいえ画面に表示されます。
一方、内部コマンドの1つが標準エラーストリームに何かを出力する場合、stderrをリダイレクトしないため、画面に表示されます。
これはecho "$time"
信頼できません。printf "%s\n" "$time"
予期しない値の副作用を避けることをお勧めしますtime
。
tail -c -number
POSIXなので、このコマンドが失敗したくありません。