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

4

我希望检查一个变量是否已经设置。 我看到了关于这个主题的一些文章,但没有针对以下情况的文章。 在我的情况下,我有无限数量的变量(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个回答

3
看起来您应该使用数组。
base=(BAS0 BAS1 BAS2 "")
for ((i=0; i<=4; ++i)); do
    echo "$i: ${base[$i]-false}"
done

顺便提一下,您应该使用小写字母来命名变量,这符合惯例,因为大写字母是保留给shell内部使用的。


3

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接