如此答案中所解释的那样,在bash中检查变量是否设置的“正确”方法如下:
if [ -z ${var+x} ]; then
echo "var is unset"
else
echo "var is set to '$var'"
fi
我感兴趣的是如何将这个内容提取成一个函数,以便可以重复使用于不同的变量。
目前为止我最好的做法是:
is_set() {
local test_start='[ ! -z ${'
local test_end='+x} ]'
local tester=$test_start$1$test_end
eval $tester
}
看起来它能工作,但有没有更好的方法可以避免使用 eval
呢?
eval
(不推荐),特别是当你不能绝对保证变量内容时,或者将要检查的变量值作为参数传递,这会让你回到最初的[[ -z $1 ]]
测试。 - David C. Rankin[[ -z $var ]]
如果var
是空字符串或未设定,就会返回真。而[[ -z ${var+x} ]]
则严格测试是否未设置。 - John1024!
运算符间接检查一个变量。isunset() { [[ -z ${!1+x} ]];}
然后你可以使用if isunset var; then echo var is not set
。 - Dave