shell中>、<、=<、>=、=和gt、lt、le、ge、eq的区别和在[ ]中用会怎样
学到了ge、gt....比较运算符,然后想着试试><和它们的区别,就在[ ]里面试了一下。
首先是 = 和eq的区别,用了下面的代码
#!/bin/bash
if [ $1="456" ]
then echo "456"
elif [ $1 -eq "123" ]
then echo "123"
fi
第一个参数输入 123,结果直接输出456。
继而我又测试了>、<、>=、=<,结果都是直接输出第一个echo的值。
而式子输出第一个echo值的原因是[ ]里面只要是不为空,那它就是true值,可执行then后面的代码。
之后又测试了一下
#!/bin/bash
if [ "10">"1" ]
then echo "yes1"
elif [ "1"="1" ]
then echo "456"
elif [ $1 -eq "123" ]
then echo "123"
fi
输出值为yes1,表明>、<、>=、=<也是可以在[ ]里面使用的。而上面的不能判断,我认为应该是参数类型的问题吧,$取到的参数值可能不是一个类型,所以不能判断。
if [ $1 -eq "ooo" ]
then echo "123"
fi
输出为[: ooo: integer expression expected,说是需要整型表达式才行,所以-eq 不能用于判断字符串。
然后我很好奇,既然-eq需要整型表达式,是不是以为$1取到的是整型,如果是,那就意味着$1=“123”,两边也是整型,那应该能判断才对,那如果不是整型,那它要求需要整型的意义何在呢?