我对 KornShell (ksh) 中的 test 命令有疑问。我知道 -ne 用于比较整数而 != 用于比较字符串。如果一个参数是字符串而另一个是整数,则测试命令将如何运行?我的代码中有以下条件,并且两者都正常工作。

代码:

myCount=1
myCount=`expr $myCount+ 0`
temp=`ps -aef | grep damn | wc -l`
if [ $temp -ne $myCount]; then
        echo ERROR Number
fi

if [ $temp != $myCount ]; then
        echo ERROR Strings
fi

输出:
ERROR Number
ERROR Strings

最佳答案

类型不相关,因为它是一个简单的文本替换。换句话说,变量 $temp 的值将代替 $temp(例如)。

至少对于我正在运行的 ksh 版本,对于数字比较,如果值以非数字开头,则等于 0。如果以数字开头但包含非数字,则会出现错误.

例如:

$ export s1=xyz
$ export s2=7xyz
$ export i1=0
$ if [ $i1 -eq $s1 ]
> then
>     echo equal
> fi
equal
$ if [ $i1 -eq $s2 ]
> then
>     echo equal
> fi
ksh: 7xyz: bad number `7xyz'

但是,根据您的评论,并非所有版本的 ksh 都是如此。

基于此,我会尽量确保您对字符串使用字符串比较,对数字使用数字比较。其他任何东西都可能是不可移植的。

关于shell - KornShell (ksh) 中的测试命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4034216/

10-13 06:04