Unix系列shell程序编写(中)

来源:Yesky 作者: 2005-10-08 出处:pcdog.com

上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 
  与上例中第一行赋值语句中的等号不同,test命令中的等号两边必须要有空格。本例test命令共有3个参数。注意两个串相等必须是长度和内容都相等。

    $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命令,所以显示参数错。

上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 
上一篇:下一篇:UNIX下几种常见系统故障和解决办法