如何在Bash中判断变量是否set,是否长度为0,请看文本的代码示例:
Bash判断变量是否set的代码:
[xinlin@ifos ~]$ unset gg
[xinlin@ifos ~]$ if [ -v gg ]; then echo 'gg is set'; else echo 'gg is not set'; fi
gg is not set
[xinlin@ifos ~]$ gg=
[xinlin@ifos ~]$ if [ -v gg ]; then echo 'gg is set'; else echo 'gg is not set'; fi
gg is set
[xinlin@ifos ~]$ gg=123
[xinlin@ifos ~]$ if [ -v gg ]; then echo 'gg is set'; else echo 'gg is not set'; fi
gg is set
需要注意的是,条件判断-v后面跟变量名。
Bash判断变量长度是否为0的代码:
[xinlin@ifos ~]$ unset gg
[xinlin@ifos ~]$ if [ -z $gg ]; then echo 'zero length'; else echo 'not zero length'; fi
zero length
[xinlin@ifos ~]$ gg=
[xinlin@ifos ~]$ if [ -z $gg ]; then echo 'zero length'; else echo 'not zero length'; fi
zero length
[xinlin@ifos ~]$ gg=123
[xinlin@ifos ~]$ if [ -z $gg} ]; then echo 'zero length'; else echo 'not zero length'; fi
not zero length
[xinlin@ifos ~]$ gg=''
[xinlin@ifos ~]$ if [ -z $gg ]; then echo 'zero length'; else echo 'not zero length'; fi
zero length
需要注意的是,条件判断-z后面跟的是string。
以上代码,gg是变量名,$gg是变量的值(没有加双引号,也没有大括号,如:${gg})。
记住:Bash里面的变量的值,都是字符串,Bash可以理解为只有唯一字符串类型的脚本语言,数值计算也是讲字符串转为数字,比较判断,一定要注意,是在做字符串比较,还是在做转换后的数值比较。
补充:
通过read命令生成的变量,就算没有值,也已经set:
[xinlin@ifos ~]$ unset jkk
[xinlin@ifos ~]$ echo -n 'input:';read jkk
input: # 这里直接回车
[xinlin@ifos ~]$ if [ -v jkk ]; then echo 'jkk is set'; else echo 'jkk is not set'; fi
jkk is set
[xinlin@ifos ~]$ echo ${#jkk}
0