我想检查bash中是否存在变量,如下所示。
if [ -z "$VARIABLE" ]; then
echo "VARIABLE does not exist"
else
echo "VARIABLE exist"
fi
工作正常。但是在下一步中,我想生成一个变量名,并检查变量名的变量是否存在,如下所示。
function generate_var_name() { echo "aaa" }
VARIABLE_NAME=$(generate_var_name)
if [ -z ${$VARIABLE_NAME:-""} ]; then # This give error message below.
echo "VARIABLE does not exist"
else
echo "VARIABLE exist"
fi
然而它没有用。它的错误消息是
${"$INCLUD_GUARD_NAME":-""}: bad substitution
同样,我想做的是 (1)生成变量名称nameA,并将其存储到另一个变量VarB。 (2)使用变量varB,检查nameA变量是否存在。
有人提出解决方案或建议,请告诉我。
非常感谢。
答案 0 :(得分:3)
看起来你想要一个变量的间接扩展。此外,似乎条件在您的条件中相反。
export aaa=foobar
VARIABLE_NAME=aaa
if [ -n "${!VARIABLE_NAME}" ]; then
echo "VARIABLE exist"
else
echo "VARIABLE does not exist"
fi
更新:正如@chepner正确指出的那样,上面的测试实际上并没有检查是否定义了变量,而是检查变量是否计算为空字符串。仅当目标是考虑未定义的变量和定义为等于空字符串等效的变量时,此检查才有效。有关变量的正确存在检查,请参阅@ chepner的答案。
答案 1 :(得分:1)
bash
已经测试了变量的存在:
foo=3 # non-empty value
bar= # empty value
# baz is not set
for v in foo bar baz; do
if [[ -v $v ]]; then
echo "$v is set; its value is ${!v}"
else
echo "$v is not set"
fi
done