$str1="abcd "
$test "$str1" = abcd
$echo $?
结果显示:1
上面str1包含5个字符,其中最后一个为空格符。而test命令中的另一个串只有4个字符,所以两串不等,test返回1。
不带任何操作符和使用-n操作符测试一个串结果是一样的,例如:
$str1=abce
$test $str1
$echo $?
结果显示:0
$test -n $str1
$echo $?
结果显示:0
但是,上面两条命令也有一点差别,反映出了使用test命令潜在的问题,请看下例:
$str1=" "
$test $str1
$echo $?
结果显示:1
$test -n "$str1"
$echo $?
结果显示:0
$test -n $str1
结果显示:test:argument expected
上例中,第一次测试为假因为Shell在执行命令行之前首先要进行变量替换,即把$str1换成空格,然后shell又将命令行上的空格删除,故test命令测试到的为空串。而在第二次测试中,变量替换后空格位于括号内,故不会被删除,test测试到的是一个包含空格的串,在第三次测试中,shell把空格删除,只把-n传个test命令,所以显示参数错。
