【问题标题】:"Invalid arithmetic operator" error when checking hostname in Bash script在 Bash 脚本中检查主机名时出现“无效算术运算符”错误
【发布时间】:2013-11-08 20:53:04
【问题描述】:

我在 bash 脚本中有一个简单的主机名检查:

if [[ `hostname` -eq "cps1214" ]]
then
    JAVA_HOME=/usr/local/jdk1.6.0_21
fi

在我们旧的 SuSE 8 系统上,这可以正常工作。在我们较新的 CentOS 系统上,这会导致错误:

[[: dev.example.com: 语法错误:算术运算符无效
(错误标记是“.example.com”)

我不太确定这里有什么问题。我的理解是-eq是明确用于字符串比较的,hostname显然是返回一个字符串,右边也是一个字符串。为什么抱怨算术?

【问题讨论】:

  • 改用 "$(hostname)" == "cps1214"
  • 我想你把 Bash 和 Perl 弄糊涂了。 Bash -eq 专门用于数字比较,而不是字符串。

标签: string bash comparison


【解决方案1】:

因为-eq 不是用于字符串比较,而是算术运算符,如 bash 文档中所述。

您可以将-eq=== 互换,就可以了。

【讨论】:

  • tldp.org/LDP/abs/html/comparison-ops.html 还要注意空格并注意括号的数量对比较的影响。
  • 我查看的示例中使用的双引号让我相信它们是作为字符串进行比较的,但显然双引号在 bash 脚本中无处不在。更改为 == 可以在两个系统上运行。
猜你喜欢
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
相关资源
最近更新 更多