检查bash中是否设置了未知变量

时间:2015-04-15 09:56:40

标签: bash shell

我想检查是否设置了变量。 我看到关于这个主题的严重帖子,但不是针对以下用例。 在我的情况下,我有一个无限数量的变量(BASE1 ... BASEn),我想检查是否定义了BASEX变量。

BASE="BAS0"
BASE1="BAS1"
BASE2="BAS2"
BASE3=""

var="";
cpt=0;
while true
do
    if [ $cpt -eq 0 ];
    then
            if ! ${BASE+false};
            then
                    echo "BASE:${BASE}is set";  ### -->  Ok it works
            else
                    echo "NOT set";
                    break;
            fi
    else
            if [ -z BASE${cpt} ];  ### ---> don t work
            then
                    if [ "BASE${cpt}" = "" ];
                    then
                            echo "BASE:${BASE}is set"; 
                    else
                            echo "BASE:${BASE}is empty ! ==> exit";
                            exit 0;
                    fi
            else
                    val="BASE${cpt}"
                    echo "$val NOT set";  ### -->  Always here !
                    break;
            fi
    fi
    cpt=`expr $cpt + 1`;
done

我尝试过严厉的方法,但没有成功:

if [ -z BASE${cpt} ]; ### ---> don t work
if ! ${BASE${cpt}+x}; ### ---> don t work
...

我该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:3)

由于您正在动态构造变量的名称,因此您可能需要间接引用:

var="BASE$cpt"
if [ -z "${!var}" ]

答案 1 :(得分:3)

听起来你应该使用数组。

base=(BAS0 BAS1 BAS2 "")
for ((i=0; i<=4; ++i)); do
    echo "$i: ${base[$i]-false}"
done

顺便说一句,您应该使用小写字母作为变量名,这与大写字母为shell内部使用保留的约定一致。