是否习惯上能够通过显式设置变量而0
不是取消设置来禁用 shell 脚本中的某些功能?更规范的方法是什么?
我问的原因是取消设置变量X
允许使用类似${X:-foo}
, where 的语法foo
,以防X
未设置。显式设置X
为0
仍会导致foo
在可能不希望的情况下进行评估。
答案1
我会一直使用unset
.
变量扩展的各种形式允许您查看它是否已设置。
echo ${X:- X is set and not empty}
echo ${X- X is set, maybe empty}
答案2
比我记忆中的还要微妙。我以前从未使用过 := 版本。从左到右评估,分配立即生效。
这也可能是:
内置“不执行任何操作”命令的一个有趣的目的。
Paul--) unset X
Paul--) printf '%s\n' "${#X}" "${X:-foo}" \
> "${#X}" "${X:=foo}" \
> "${#X}" "${X:-why}"
0
foo
0
foo
3
foo
Paul--)