是否有可移植的测试来确定变量(其名称在脚本中静态已知)是否未设置(与空不同)?
答案1
对于标量变量,采用标准 (POSIX)sh
语法:
if [ "${var+set}" != set ]; then
echo var is not set
fi
或者更漂亮但不太清晰的东西,比如
if [ -z "${var++}" ]; then
echo var is unset
fi
或者:
if ${var+false}; then
echo var is unset
fi
对于数组变量(不是说数组是便携的),在zsh
或中yash
,除非为数组分配了任何列表(包括空列表),否则将返回 unset,而在 bash 或 ksh 中将返回未设置除非设置了索引 0 的元素。与关联数组相同(对于键“0”)。
请注意,除了zsh
(当不在sh
仿真中时),export var
或readonly var
宣称该变量但不给它任何值,因此除此之外的 shellzsh
都会报告var
为该unset
变量(除非var
在调用export
/之前已分配了值readonly
)。