Shell中echo变量时,变量中的多个空格只打印了一个,如下
1
2
3
|
sh-3.2$ tmp=
"a b d"
sh-3.2$
echo
$tmp
a b d
|
解决办法是给变量加上双引号”,如下
1
2
3
|
sh-3.2$ tmp=
"a b d"
sh-3.2$
echo
"$tmp"
a b d
|
至于原因,需要了解shell的解析过程:
- 替换变量
- 执行命令
- 按IFS划分命令之后的参数,用”"和”包围的部分作为命令的一个参数。
echo $tmp的执行过程为:
- 替换变量:echo a b d
- 执行命令:echo a b d
- 按IFS划分echo命令之后的参数a, b, d
所以打印出来就是a b d,多个空格只显示了一个。
观察一下代码也可知
1
2
3
4
5
6
7
8
9
|
sh-3.2$ tmp=
"a b d"
sh-3.2$
echo
$tmp
a b d
sh-3.2$
echo
a b c
a b c
sh-3.2$
echo
"$tmp"
a b d
sh-3.2$
echo
"a b c"
a b c
|