shell(bash/zsh/cmd) 变量值使用不同引号的区别

shell 变量值也像 YAML 中的字符串定义一样,在定义时可以不用引号、用单引号、用双引号、还可以用反引号,它们在实际效果上有啥区别、该如何选择呢?

不用引号

  • 如果变量值没有 空格 等会影响 shell 把变量值识别一个连续字符串的特殊符号,则可以不用引号
  • 变量值中如果有 变量引用,会正常解析为引用变量的值

用单引号

  • 跟 YAML 一样,会对变量值进行原样输出
  • 也就是说,变量值里的 变量引用、\n 符号等,都会被认为是普通字符而直接输出

用双引号

  • 变量值中可以有 空格 等影响连续字符串识别的特殊符号,只要在双引号范围内的都会被认为是同一个连续字符串
  • 其它特性跟 不用引号 相同

用反引号

  • 当需要调用 lsdate 等命令时,需要用反引号将命令名括起来,不然不是命令调用
  • 同等作用的还有 $(),相比反引号语法它可识别性更好,使用的更为广泛