我试图调试一个现有的程序,并找到一个if条件,没有$符号的前缀。
价值是:
dt_val=1234
prev_dt_val=1234如果情况如下:
if [ dt_val -eq prev_dt_val ]
then
echo "Equal"
else
echo "Not equal"
fi
Result:
Equal有人会对没有美元符号的情况下的健康状况有一点了解吗?那不应该是..?
[ $dt_val -eq $prev_dt_val ]当比较字符串值时,相同的条件会失败。这是否意味着,这个条件不需要一个$符号的数字?
附加信息:按建议将字符串与==进行比较:
dt_val="abcd"
prev_dt_val="abcd"
if [ dt_val == prev_dt_val ]
> then
> echo Equal
> else
> echo Not equal
> fi
Not equalShell信息:
echo $SHELL
/usr/bin/ksh
Version M-11/16/88f不知道为什么也没有错误。
发布于 2019-01-15 20:38:35
在ksh中,内置[将-eq的操作数与算术上下文中的操作数相同,就像用于[[和-eq的Bash一样。在算术上下文中,变量不需要$符号。
$ ksh -c 'a=1 b=1; if [ a -eq b ]; then echo equal; else echo different; fi'
equal
$ ksh -c 'a=1 b=2; if [ a -eq b ]; then echo equal; else echo different; fi'
different甚至:
$ ksh -c 'a=2 b=8; if [ a*4 -eq b ]; then echo equal; else echo different; fi'
equal
$ ksh -c 'a=2 b=9; if [ a*4 -eq b ]; then echo equal; else echo different; fi'
different(但是,*仍然是全局的,因此应该引用a*4。)
这是ksh93,ksh --version展示了sh (AT&T Research) 93u+ 2012-08-01,它来自Debian的包(ksh,package version 93u+20120801-3.1)。我在Debian的mksh中得到了同样的结果,所以我认为ksh88在这里已经足够接近了。
为了进行比较,在Bash中出现了一个错误:
$ bash -c 'a=1 b=1; if [ a -eq b ]; then echo equal; else echo different; fi'
bash: line 0: [: a: integer expression expected
different(它打印different,因为[在出错时返回一个falsy值)。
对于[[,它起作用:
$ bash -c 'a=1 b=1; if [[ a -eq b ]]; then echo equal; else echo different; fi'
equalZsh就像这里的Bash,[错误在a -eq b上,[[起作用。
发布于 2019-01-15 13:49:42
首先,脚本没有计算变量,因为它在变量名前面缺少了$,就像您也发现的那样。
其次,它输出“相等”,因为它在test ([)命令中使用数字比较操作符D3。当它传递两个非数字字符串作为参数时,它们都计算为相同的数值,因此输出“相等”字符串。
请注意,至少bash版本会抱怨:
$ if [ 0 -eq bla ]; then echo yes; fi
-bash: [: bla: integer expression expected我的短跑版也抱怨道:
$ if [ 0 -eq bla ]; then echo yes; fi
dash: 1: [: Illegal number: bla我感兴趣的是,你用的是什么外壳,这一点都不抱怨。
即使存在带有这些字符串名称的变量,我也会得到相同的结果。
https://unix.stackexchange.com/questions/494607
复制相似问题