1 使用未定义变量的风险
文章[1]中给出了一个例子,
chroot=$1
...
rm -rf $chroot/usr/share/doc
运行这段代码,如果用户忘了输入参数,则系统目录下的文档全部被删掉了。
2 对策
set -u
或
set -o nounset
前者是缩写,后者是完整表达方式。
使用“set -u”,可以使脚本在遇到未定义变量时终止运行。
3 在不确定变量是否被定义时,为其赋缺省值
格式:
变量名=${变量名:-[缺省值]}
例如:
a.sh:
#!/bin/bash
set -o nounset
# 因为VAR没定义,所以VAR被复制为缺省值abc
VAR=${VAR:-abc}
echo "\$VAR="$VAR
# 使用未定义的变量VAR,因为使用了set -o nounset,脚本被终止。
unset VAR
echo "\$VAR="$VAR
运行:
$ ./a.sh
$VAR=abc
./a.sh: line 9: VAR: unbound variable
如果不写缺省值,这下面的语句执行后,VAR为空字符串。
VAR=${VAR:-}
网友评论