Chinaunix

标题: 弱弱的问一下,-gt 和 > 有什么不同呀 [打印本页]

作者: chliang315    时间: 2008-03-06 23:29
标题: 弱弱的问一下,-gt 和 > 有什么不同呀
if [[ $i -gt 20 ]]
then
{
...
}
fi
就可以的

为什么下面的不可以呀
if [[ $i > 20 ]]
then
{
...
}
fi
作者: cjaizss    时间: 2008-03-06 23:42
这里>是字符串比较
作者: chliang315    时间: 2008-03-06 23:46
原帖由 cjaizss 于 2008-3-6 23:42 发表
这里>是字符串比较


是不是只能作字符串比较呀?
作者: cjaizss    时间: 2008-03-06 23:55
原帖由 chliang315 于 2008-3-6 23:46 发表


是不是只能作字符串比较呀?

是的,只能拿来做字符串比较。
一直看不习惯[[]],思想还是停留在UNIX时代.......
作者: walkerxk    时间: 2008-03-07 09:16
用-gt的话:[ 20 -gt 9 ]
用>的话:[[ 9 > 20 ]]
作者: chliang315    时间: 2008-03-07 09:57
那为什么下面的又可以呀
if [[ $i == 10 ]]
then
{
...
}
if
作者: prc    时间: 2008-03-07 10:05
这个跟shell有关吧

在bash上[[ $i -gt 20 ]] 和 [[ $i > 20 ]]都是可以的
但是-gt更典型的用法应该是 [ $i -gt 20 ]
有的shell是不支持 [[ ]]的
作者: 无声无息    时间: 2008-03-07 10:11
man test
       STRING1 = STRING2
              the strings are equal

       STRING1 != STRING2
              the strings are not equal

       INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2

       INTEGER1 -ge INTEGER2
              INTEGER1 is greater than or equal to INTEGER2

       INTEGER1 -gt INTEGER2
              INTEGER1 is greater than INTEGER2

       INTEGER1 -le INTEGER2
              INTEGER1 is less than or equal to INTEGER2

       INTEGER1 -lt INTEGER2
              INTEGER1 is less than INTEGER2

       INTEGER1 -ne INTEGER2
              INTEGER1 is not equal to INTEGER2
作者: chliang315    时间: 2008-03-07 10:19
原帖由 prc 于 2008-3-7 10:05 发表
这个跟shell有关吧

在bash上[[ $i -gt 20 ]] 和 [[ $i > 20 ]]都是可以的
但是-gt更典型的用法应该是 [ $i -gt 20 ]
有的shell是不支持 [[ ]]的


我在ubuntu下面试的。用的是bash。 这个可以的[[ $i -gt 20 ]] 。 但[[ $i > 20 ]]这个就不可以了。不知道为什么。
作者: cjaizss    时间: 2008-03-07 10:26
原帖由 prc 于 2008-3-7 10:05 发表
这个跟shell有关吧

在bash上[[ $i -gt 20 ]] 和 [[ $i > 20 ]]都是可以的
但是-gt更典型的用法应该是 [ $i -gt 20 ]
有的shell是不支持 [[ ]]的

那你就试试
i=3
if [[ $i > 20 ]]
then
     echo  $i \> 20
else
     echo $i \<  20
fi

作者: prc    时间: 2008-03-07 10:45

  1. #!/bin/bash
  2. if [[ 0 ]]; then
  3.   echo A
  4. else
  5.   echo B
  6. fi
复制代码


  1. #!/bin/bash
  2. if [[ 1 ]]; then
  3.   echo A
  4. else
  5.   echo B
  6. fi
复制代码

这两个脚本运行的结果都是
A
为什么呢?
作者: chliang315    时间: 2008-03-07 16:27
这两种条件应该都是真的
作者: prc    时间: 2008-03-07 16:56

  1. 6.4 Bash Conditional Expressions
  2. ...
  3. string1 < string2
  4.     True if string1 sorts before string2 lexicographically in the current locale.
  5. string1 > string2
  6.     True if string1 sorts after string2 lexicographically in the current locale.
  7. arg1 OP arg2
  8.     OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true if arg1 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to arg2, respectively. Arg1 and arg2 may be positive or negative integers.
复制代码

作者: walkerxk    时间: 2008-03-10 11:16
原帖由 chliang315 于 2008-3-7 09:57 发表
那为什么下面的又可以呀
if [[ $i == 10 ]]
then
{
...
}
if

因为字符串的相等和数字的相等是一样的,但是最好还是使用if [ $i -eq 10 ]

原帖由 prc 于 2008-3-7 10:05 发表
这个跟shell有关吧

在bash上[[ $i -gt 20 ]] 和 [[ $i > 20 ]]都是可以的
但是-gt更典型的用法应该是 [ $i -gt 20 ]
有的shell是不支持 [[ ]]的

你确定你那 [[ 9 > 20 ]]为真?
walkerxk@www:~$ if [[ 9 -gt 20 ]];then echo 1;else echo 0;fi
0
walkerxk@www:~$ if [[ 9 > 20 ]];then echo 1;else echo 0;fi
1
walkerxk@www:~$
原帖由 prc 于 2008-3-7 10:45 发表

#!/bin/bash
if [[ 0 ]]; then
  echo A
else
  echo B
fi



#!/bin/bash
if [[ 1 ]]; then
  echo A
else
  echo B
fi

这两个脚本运行的结果都是
A
为什么呢?

凡是常数,返回值都是true,只有表达式才会有判断真假。

[ 本帖最后由 walkerxk 于 2008-3-10 11:18 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2