shell(bash/zsh/cmd) 变量值使用不同引号的区别
shell 变量值也像 YAML 中的字符串定义一样,在定义时可以不用引号、用单引号、用双引号、还可以用反引号,它们在实际效果上有啥区别、该如何选择呢?
不用引号
- 如果变量值没有
空格
等会影响 shell 把变量值识别一个连续字符串的特殊符号,则可以不用引号 - 变量值中如果有
变量引用
,会正常解析为引用变量的值
用单引号
- 跟 YAML 一样,会对变量值进行原样输出
- 也就是说,变量值里的 变量引用、
\n
符号等,都会被认为是普通字符而直接输出
用双引号
- 变量值中可以有 空格 等影响连续字符串识别的特殊符号,只要在双引号范围内的都会被认为是同一个连续字符串
- 其它特性跟 不用引号 相同
用反引号
- 当需要调用
ls
、date
等命令时,需要用反引号将命令名括起来,不然不是命令调用 - 同等作用的还有
$()
,相比反引号语法它可识别性更好,使用的更为广泛