shell脚本中引号也是有讲究的。
可以分为单引号‘ ’,双引号“ ”和 反引号 ` `
具体区别来看一个例子
输出结果
可得出结论
1、 单引号括起来的字符都作为普通字符出现,如第4,7,10,13,16,19,22行
值得一提的是第19行,执行结果并非预期的 My home dictory is : ‘$HOME’ 而是 My home dictory is :/root
原因是执行的时候My home dictory is : ‘$HOME’ 这里还有单引号,$HOME继续作为普通字符串输出,于是进一步分解为 My home dictory is :$HOME,执行系统变量,得到最终结果 My home dictory is :/root
步骤:‘ My home dictory is : ‘$HOME’ ‘ -----------> My home dictory is : ‘$HOME’ ---------> My home dictory is :$HOME ------------> My home dictory is :/root
2、由双引号括起来的字符,除$ ,反引号 `` 和反斜线 \ (反斜线没有在这举例,后续举例)保留其特殊功能外,其余字符均作为普通字符对待。
如第5,8,11行
第11行, 单引号不保留其特殊功能,因此单引号被输出
第17行,反引号生效,执行$HOME的时候报错,提示 /root是一个目录
第20行,同样是单引号失去其特殊功能,$保留其特殊功能,因此结果是 My home dictory is :'/root'
3、反引号括起来的字符串会被shell解释为命令,在执行的时候会先执行该命令。因此第17行会报错
4、反斜线,转义字符,把特殊字符变成普通字符
注意双引号中,反斜线保留其特殊作用时的位置。