test 是个字符串,而回车符是一个不可见的特殊字符,只有在双引号中才有其本来的含义。不在双引号中,类似的特殊字符都将被shell 解释为空格,制表符 \t 也是一样,而在单引号中 $ 的变量替换功能被关闭。
[root@master shell_learning]# seq 1 5
1
2
3
4
5
[root@master shell_learning]# test=$(seq 1 5)
[root@master shell_learning]# echo $test
1 2 3 4 5
[root@master shell_learning]# echo "$test"
1
2
3
4
5
[root@master shell_learning]# echo '$test'
$test
如果 test 恰好是一个目录,在 test 不为空的情况下,cd $test 和 cd "$test" 执行结果是一样的。但是一旦 test 为空,则执行结果就截然不同了。
[root@master shell_learning]# echo $test
[root@master shell_learning]# cd "$test"
[root@master shell_learning]# cd $test
[root@master ~]#