我早些时候正在编写一个小脚本,并注意到一些我无法解释的事情。
运行这个命令
(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 的多个参数,在任何空格上分割,并且 echo 打印所有用空格分隔的参数。另一方面,echo "$Result"
会将整个字符串(包括空格)放入第一个也是唯一一个 echo 参数中,该参数将直接打印。
答案2
亚当的回答为我指明了正确的方向,因为它与空白有关。更具体地说,在使用时\n
,两行之间的空格被解释为空格并转换为单个空格,但在使用时
$Result
保留为空格。\n
"$Result"
我以前从未真正认为 '\n' 是空格。