在shell中变量是不区分类型的,也就是统一默认既是字符串型,这是好事 ,灵活,也不是好事,用起来不规范。

直接切入正题,注意 如果引用变量请最好加双引号,否则会出现意外的问题。

i=`ps -e|grep java|awk '{print $1}'`

 [ -z $i ] && echo $?

0

[ -n $i ] && echo $?

0

以上$i 为加双引号;再试试加双引号的

[ -z "$i" ] && echo $?

0

[ -n "$a" ] && echo $?

此时没有结果输出,&&的作用是,如果前面的命令执行为真,则后面的命令也执行;否则不执行。

--------------------------------------------------------------------------------------------------------------------------------

DST_TMP='/usr/local/sh/im'

内有文件13.txt

[ -f /usr/local/sh/im/* ] && echo ok

ok

[ -f "/usr/local/sh/im/*" ] || echo ok

ok

经过测试,是因为通配符*的影响,带通配符最好不要双引号。否则结果不对。