我想检查是否设置了变量。 我看到关于这个主题的严重帖子,但不是针对以下用例。 在我的情况下,我有一个无限数量的变量(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
...
我该怎么办?
提前致谢。
答案 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内部使用保留的约定一致。