Bash(和其他语言) - 为什么没有默认检查未声明的变量?

时间:2016-04-15 19:03:18

标签: bash variables

作为一名C / C ++程序员,每个语法错误(如拼写错误的变量名称)都会导致编译错误,对我来说这听起来很奇怪,"高级"语言将优雅地接受变量用法,当从未声明变量时,只需将其扩展为空字符串或其他内容。

阅读本文

http://m.slashdot.org/story/309941

证实了我的恐惧..当在shell脚本中有这样的例子时:

rm -rf $PROJECT_ROOT/bin/*

检查每个字母是否在其上 - 变量名称在长shell脚本中的任何位置都不会拼写错误。 否则,它将扩展为空字符串,删除/ bin目录中的所有内容。它可能不仅仅是删除 - 设置权限,或搜索特定文件名或文件中的某些内容。

即使在验证时:

[ -z "$PROJECT_ROOT" ] && exit

我必须确保每一次检查每一次"危险"变量没有拼写错误,否则可能会发生不好的事情。 此外,变量可能来自另一个shell脚本...例如,保存配置变量。 如果不允许未声明的变量使用,那么它会更安全吗:抛出错误:未声明的变量' PROJECT_ROOT'甚至没有启动脚本。像C ++中的东西 - 你不能使用未声明的变量 - 你应该声明你想要使用的任何东西。

1 个答案:

答案 0 :(得分:1)

Bash有一张支票。

set -o nounset

此外,这个故事是由一名初级员工发给我的老板的 - 由于几个原因,这件事从未发生过。但是,`set -o nounset'在每个bash脚本源的函数库中。

仅供参考,有些人喜欢`set -e'尽管我自己也不是粉丝。我已经陷入了ERR。