有关单引号、双引号和不加引号的简要说明

名称 解释
单引号 所见即所得:即将单引号内的所有内容都原样输出,或者描述为单引号里面看到什么就会输出什么。
反引号 命令替换,指的是shell能够将一个命令的标准输出插在一个命令行中任何位置。
双引号 把双引号内的所有内容都输出出来;如果内容中有命令(要反引下)、变量、特殊转义字符等,会先把变量、命令解析出结果,然后再输出最终内容来。
无引号 把内容输出出来,会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整地输出,需要改加双引号,一般连续的字符串,数字,路径等可以不加任何引号,不过无引号的情况最好用双引号替代。
提示 这里的结论仅为经验型的结论,可能对某些语言不适合,例如:awk内部就有特殊性。

举例:

[root@localhost ~]# x=*
[root@localhost ~]# echo $x  (显示当前目录下所有文件)
公共的 模板 视频 图片 文档 下载 音乐 桌面
注意:文章后面解释$x为何会显示当前目录下所有文件。
[root@localhost ~]# echo '$x'  单引号,所见即所得
$x
[root@localhost ~]# echo "$x"  双引号会把变量输出
*

反单引号示例:

[root@localhost ~]#echo "date +%Y%m%d"  双引号
date +%Y%m%d
[root@localhost ~]#echo 'date +%Y%m%d'   单引号
date +%Y%m%d
[root@localhost ~]#echo `date +%Y%m%d` 反单引号
20160811

对x=* ;echo $x的解释

转载自http://roclinux.cn/?p=1227

shell在给变量赋值时不进行文件名替换。所以当你执行x=*时,只是一个星号赋值给了x变量。真正的替换发生在echo $x时。

详细的步骤是这样的:

当所在的目录不为空

1 当执行x=*时,shell扫描命令行,把*赋值给x。
2 当执行echo $x时,shell先将$x替换为*
3 shell将*替换为当前目录下的文件列表
4 shell执行echo命令,将文件列表作为参数传递给它。

步骤就是这样,不难,只要记住:“变量赋值时不做匹配替换。shell先做变量替换,在做文件名替换,最后处理参数”。

当所在的目录为空时

# x=*
# echo $x
# *

x就等于*。