根据Google Shell 风格指南 https://google.github.io/styleguide/shell.xml#Quoting, 我应该:
始终引用包含变量、命令替换、空格或 shell 元字符的字符串,除非需要小心的不带引号的扩展。
也许我误解了“命令替换”的含义,但我想知道在以下示例中是否需要使用引号:
VAR="$(echo foo bar)"
$(echo foo bar)
确实是命令替换。在这个特定的示例中,您不需要双引号,因为变量赋值会为其右侧创建一个“双引号上下文”,因此VAR=$(…)
相当于VAR="$(…)"
.
在 bash 中,不需要双引号export VAR=$(…)
or declare VAR=$(…)
。但在其他一些 sh 实现(例如 dash)中,您确实需要双引号。
你确实需要双引号env VAR=$(…) somecommand
, in make VAR=$(…)
等等。并不是等号使双引号成为可选,而是等号被 shell 解析为赋值。
有其他一些双引号是可选的上下文 https://unix.stackexchange.com/questions/68694/when-is-double-quoting-necessary/68748#68748,但是遵循简单的规则就不会出错:始终在变量和命令替换周围使用双引号 https://unix.stackexchange.com/questions/131766/why-does-my-shell-script-choke-on-whitespace-or-other-special-characters unless 你想要 split+glob 运算符 https://unix.stackexchange.com/questions/78914/quoted-vs-unquoted-string-expansion.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)