在传统的 Bourne Shell (sh) 中,如果想要确保在脚本中的某个时刻已经设置了一个变量并且至少它有一些特定的默认值,可以使用以下构造:
: "${VAR:=defaultValue}"
Zsh 脚本的等效项是什么?
谢谢。
编辑:我的意思是,如果有 Zsh 特定的方法可以做到这一点。而不是仅仅执行真正的命令(:)。
Edit2:正确引用参数扩展。请参阅 Stéphane Chazelas 的回答。
答案1
实际上,
: ${VAR:=defaultValue}
zsh
在(假设您没有启用该选项)中是正确的globsubst
,但在其他 shell 中则不然。在其他类似 Bourne 的 shell 中,这将构成拒绝服务漏洞,除非您启用noglob
以下选项忘记在 bash/POSIX shell 中引用变量的安全隐患。
在这些中,你需要
: "${VAR:=defaultValue}"
zsh
确实支持那些 Bourne 操作符,甚至以同样的方式引入了一些自己的操作符:
${VAR::=value}
无条件分配value
给变量(并扩展到结果)。这很有用,zsh
因为它可以与其他参数扩展运算符或标志结合使用。${:-value}
(即VAR
省略)扩展为value
。与其他运算符结合使用时也很有用。
这里的另一个选择是:
VAR=${VAR:-defaultValue}
这在 zsh 和所有其他类似 Bourne 的 shell 中是可以的,并且可以更清楚地传达含义。