前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell中的单等号、双等号和"-eq"

Shell中的单等号、双等号和"-eq"

作者头像
程序熵
发布2024-02-06 17:48:52
1800
发布2024-02-06 17:48:52
举报
文章被收录于专栏:技术汇技术汇

问:

在 shell 脚本编程中,=,== 和 -eq 之间的区别是什么?

以下内容是否有任何区别?

代码语言:javascript
复制
[ $a = $b ]
[ $a == $b ]
[ $a -eq $b ]

是不是 = 和 == 只在变量包含数字时使用?

答:

= 和 == 用于字符串比较 -eq 用于数值比较

注意 == 不是 POSIX 兼容的,在 sh(Bourne Shell) 或其兼容的 POSIX shell 中,== 用于字符串比较的操作符不是正式支持的。POSIX 规范和原始的 Bourne Shell 使用单个等号 = 作为字符串比较的操作符。在 Bourne Again Shell(bash) 、ksh 中,则两者都可以使用。

代码语言:javascript
复制
$ a=foo
$ [ "$a" = foo ]; echo "$?"       # POSIX sh
0
$ [ "$a" == foo ]; echo "$?"      # bash-style
0
$ [ "$a" -eq foo ]; echo "$?"     # wrong
-bash: [: foo: integer expression expected
2

(注:确保引用变量表达式。不要省略上述代码中的双引号。)

经测试可知:

expression \ shell

bash

ksh

zsh

[ "$a" = foo ]

yes

yes

yes

[ "$a" == foo ]

yes

yes

no

[[ "$a" = foo ]]

yes

yes

yes

[[ "$a" == foo ]]

yes

yes

yes

当你写脚本打算在不同的 shell 环境下运行时,了解这些细微的差别和兼容性问题是很重要的。如果你想编写兼容 POSIX 的脚本,在比较字符串时最好使用单等号 = 或者用双方括号的表达式。

-eq 是条件测试的一部分,用于在 [ ] 或 [[ ]] 结构中判断两个整数是否相等。

代码语言:javascript
复制
#!/bin/bash

num1=10
num2=20
num3=10

if [ $num1 -eq $num2 ]; then
    echo "num1 equals num2"
else
    echo "num1 does not equal num2"
fi

if [[ $num1 -eq $num3 ]]; then
    echo "num1 equals num3"
else
    echo "num1 does not equal num3"
fi

其他比较整数的操作符有:

  • -ne: not equal to, 不等于。
  • -lt: less than, 小于。
  • -le: less than or equal to, 小于或等于。
  • -gt: greater than, 大于。
  • -ge: greater than or equal to, 大于或等于。

参考文档:

  • stackoverflow question 20449543
  • https://www.gnu.org/software/bash/manual/bash.html#Bash-Conditional-Expressions
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-02,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com