【shell】echo不显示变量中的多个空格

转自:枫芸志:http://witmax.cn/shell-echo-spaces.html

Shell中echo变量时,变量中的多个空格只打印了一个,如下

1 sh-3.2$ tmp="a b d"
2 sh-3.2$ echo $tmp
3 a b d

解决办法是给变量加上双引号”,如下

1h-3.2$ tmp="a b d"
2sh-3.2$ echo "$tmp"
3a b d

至于原因,需要了解shell的解析过程:

  1. 替换变量
  2. 执行命令
  3. 按IFS划分命令之后的参数,用”"和”包围的部分作为命令的一个参数。

echo $tmp的执行过程为:

  1. 替换变量:echo a    b    d
  2. 执行命令:echo a    b    d
  3. 按IFS划分echo命令之后的参数a, b, d

所以打印出来就是a b d,多个空格只显示了一个。

观察一下代码也可知

1 sh-3.2$ tmp="a b d"
2 sh-3.2$ echo $tmp
3 a b d
4 sh-3.2$ echo a b c
5 a b c
6 sh-3.2$ echo "$tmp"
7 a b d
8 sh-3.2$ echo "a b c"
9 a b c
posted on 2011-05-20 09:52  Kadin Zhu  阅读(2790)  评论(0编辑  收藏  举报