
私は以前少しスクリプトをしていましたが、説明できないことがわかりました。
このコマンドを実行してください
(time wget --spider http://www.google.co.uk/) 2>&1 | egrep 'real|response'
私にこの出力を与えます(私が期待していたもの)
HTTP request sent, awaiting response... 200 OK
real 0m0.086s
上記の出力を変数にキャプチャしました。
Result=$((time wget --spider http://www.google.co.uk/) 2>&1 | egrep 'real|response')
もし私が
echo "$Result"
期待した結果を得ました。
HTTP request sent, awaiting response... 200 OK
real 0m0.086s
しかし、もし私が
echo $Result
わかりました。
HTTP request sent, awaiting response... 200 OK real 0m0.086s
なぜそんなことですか?
答え1
このecho $Result
コマンドは変数値をエコーの複数の引数に変換し、スペースに分割し、エコーはスペースで区切られたすべての引数を出力します。一方、echo "$Result"
文字列全体(スペースを含む)は、直接印刷される最初の唯一のechoパラメータに入力されます。
答え2
Adamの答えは、スペースに関連する正しい方向を教えてくれます。より具体的には、\n
2行の間のスペースはスペースとして解釈され、使用中は単一のスペースに変換されますが、使用中は
$Result
スペースのままです。\n
"$Result"
私は以前「\n」を空白と考えたことがありません。