Bash,对 echo $variable 感到好奇

Bash,对 echo $variable 感到好奇

我早些时候正在编写一个小脚本,并注意到一些我无法解释的事情。

运行这个命令

(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' 是空格。

相关内容