首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有$符号的Unix AIX变量?

没有$符号的Unix AIX变量?
EN

Unix & Linux用户
提问于 2019-01-15 13:35:19
回答 2查看 398关注 0票数 3

我试图调试一个现有的程序,并找到一个if条件,没有$符号的前缀。

价值是:

代码语言:javascript
复制
dt_val=1234
prev_dt_val=1234

如果情况如下:

代码语言:javascript
复制
if [ dt_val -eq prev_dt_val ]
then
  echo "Equal"
else
  echo "Not equal"
fi

Result:
Equal

有人会对没有美元符号的情况下的健康状况有一点了解吗?那不应该是..?

代码语言:javascript
复制
[ $dt_val -eq $prev_dt_val ]

当比较字符串值时,相同的条件会失败。这是否意味着,这个条件不需要一个$符号的数字?

附加信息:按建议将字符串与==进行比较:

代码语言:javascript
复制
dt_val="abcd"
prev_dt_val="abcd"

if [ dt_val == prev_dt_val ]
> then
> echo Equal
> else
> echo Not equal
> fi
Not equal

Shell信息:

代码语言:javascript
复制
echo $SHELL
/usr/bin/ksh
Version M-11/16/88f

不知道为什么也没有错误。

EN

回答 2

Unix & Linux用户

发布于 2019-01-15 20:38:35

ksh中,内置[-eq的操作数与算术上下文中的操作数相同,就像用于[[-eq的Bash一样。在算术上下文中,变量不需要$符号。

代码语言:javascript
复制
$ 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

甚至:

代码语言:javascript
复制
$ 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中出现了一个错误:

代码语言:javascript
复制
$ 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值)。

对于[[,它起作用:

代码语言:javascript
复制
$ bash -c 'a=1 b=1; if [[ a -eq b ]]; then echo equal; else echo different; fi'
equal

Zsh就像这里的Bash,[错误在a -eq b上,[[起作用。

票数 5
EN

Unix & Linux用户

发布于 2019-01-15 13:49:42

首先,脚本没有计算变量,因为它在变量名前面缺少了$,就像您也发现的那样。

其次,它输出“相等”,因为它在test ([)命令中使用数字比较操作符D3。当它传递两个非数字字符串作为参数时,它们都计算为相同的数值,因此输出“相等”字符串。

请注意,至少bash版本会抱怨:

代码语言:javascript
复制
$ if [ 0 -eq bla ]; then echo yes; fi
-bash: [: bla: integer expression expected

我的短跑版也抱怨道:

代码语言:javascript
复制
$ if [ 0 -eq bla ]; then echo yes; fi
dash: 1: [: Illegal number: bla

我感兴趣的是,你用的是什么外壳,这一点都不抱怨。

即使存在带有这些字符串名称的变量,我也会得到相同的结果。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/494607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档