Home > 脚本语言 > Shell中的[]

Shell中的[]

Shell中的[],没太搞明白,请高手指点。

ricky@ricky-desktop:~$ a=0
ricky@ricky-desktop:~$ if [ $a ]; then
> echo "Gooooood"
> else
> echo "Baaaaaaad"
> fi
Gooooood
ricky@ricky-desktop:~$ a=1
ricky@ricky-desktop:~$ if [ $a ]; then echo "Gooooood"; else echo "Baaaaaaad"; fi
Gooooood
ricky@ricky-desktop:~$ a="string"
ricky@ricky-desktop:~$ if [ $a ]; then echo "Gooooood"; else echo "Baaaaaaad"; fi
Gooooood
ricky@ricky-desktop:~$ a=
ricky@ricky-desktop:~$ if [ $a ]; then echo "Gooooood"; else echo "Baaaaaaad"; fi
Baaaaaaad
ricky@ricky-desktop:~$ a=100
ricky@ricky-desktop:~$ if [ $a ]; then echo "Gooooood"; else echo "Baaaaaaad"; fi
Gooooood
ricky@ricky-desktop:~$ unset a
ricky@ricky-desktop:~$ if [ $a ]; then echo "Gooooood"; else echo "Baaaaaaad"; fi
Baaaaaaad
ricky@ricky-desktop:~$

 


多些几位大虾的指点,上面如果用string存在不存在来解释,那么下面怎么解释:

ricky@ricky-desktop:~$ a=1
ricky@ricky-desktop:~$ if [ ! $a ] ; then echo "Goooooood"; else echo "Baaaaaad"; fi
Baaaaaad
ricky@ricky-desktop:~$ a=0
ricky@ricky-desktop:~$ if [ ! $a ] ; then echo "Goooooood"; else echo "Baaaaaad"; fi
Baaaaaad
ricky@ricky-desktop:~$ a=true
ricky@ricky-desktop:~$ if [ ! $a ] ; then echo "Goooooood"; else echo "Baaaaaad"; fi
Baaaaaad
ricky@ricky-desktop:~$ a=false
ricky@ricky-desktop:~$ if [ ! $a ] ; then echo "Goooooood"; else echo "Baaaaaad"; fi
Baaaaaad
ricky@ricky-desktop:~$ 

Categories: 脚本语言 Tags:

10 Comments

  • At 2009.12.17 21:41, mjxian said:

    可以看 man 的吧?就是 test 的另一种表达方式。

    TEST(1) User Commands TEST(1)

    NAME
    test – check file types and compare values

    SYNOPSIS
    test EXPRESSION
    test

    [ EXPRESSION ]
    [ ]
    [ OPTION

    DESCRIPTION
    Exit with the status determined by EXPRESSION.

    • At 2009.12.18 03:44, gengmao said:

      http://en.wikipedia.org/wiki/Test_(Unix)

      also in the man page of test:
      string True if string is not the null string.

      • At 2009.12.18 06:01, sunyc said:

        $ man [

        • At 2009.12.18 16:21, Tonyliao said:

          在shell中,变量用不定义类型,没有布尔类型
          if的判断,如果是数字,只有1,0,非0即1。如果是字符串,有非空,空。
          看一下perl语言入门第四版,跟里面讲的一样

          • At 2009.12.18 17:01, ricky said:

            那后面的怎么解释,string的解释可以理解, !0或者!1 为什么都返回false呢?

            • At 2009.12.18 21:26, tonyliao said:

              你要注意,a=0; !$a 不代表非0,而是变成一个字符串了,是!0的组合
              举个例子
              localdomain ~]# cat test.sh
              #!/bin/bash
              a=0
              b=!$a
              echo “$b”
              得出来的结果是!0

              • At 2009.12.18 22:35, Ricky said:

                需要在实验一下, !$a 跟 ! $a 还是略有不同的

          • At 2009.12.18 16:22, Tonyliao said:

            顺便问一句,rickyzhu在深圳?

            • At 2009.12.18 17:00, ricky said:

              对的,深圳大冲

              • At 2009.12.18 21:28, tonyliao said:

                加我gmail吧,明天有个广州技术沙龙在深圳举行,有兴趣一起去不?
                ps,你们公司需要招聘linux 系统管理员或DBA吗?我在求职中

            (Required)
            (Required, will not be published)