我可以在bash中创建变量的别名吗?

时间:2016-08-20 08:07:36

标签: bash

我想检查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变量是否存在。

有人提出解决方案或建议,请告诉我。

非常感谢。

2 个答案:

答案 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