【问题标题】:What does "-ne" mean in bash?bash 中的“-ne”是什么意思?
【发布时间】:2026-02-04 23:20:08
【问题描述】:

bash 脚本中的“-ne”命令是什么意思?

例如,bash 脚本中的以下行是做什么的?

[ $RESULT -ne 0 ] 

【问题讨论】:

  • 它检查$RESULT是否“不等于”0
  • 这是数字不等式; != 是字符串不等式。
  • 这并不意味着“在 bash 中”。 [ 运行一个名为 test 的命令。 -netest 命令的参数,而不是 bash,您可以在 man test 中找到它的文档。
  • 顺便说一句,这是错误的,因为您没有使用引号。它至少需要是[ "$RESULT" -ne 0 ]——或者更好的是(( RESULT != 0 ))。 (比这更好——如果你从$? 得到这个,你可以直接在你正在运行的命令的退出状态上分支,而不是运行它,将它的退出状态捕获到一个变量中,然后替换该变量的值转换为test 命令)。

标签: bash shell syntax


【解决方案1】:

如果您还不知道去哪里寻找,这是很难搜索的内容之一。

[ 实际上是一个命令,而不是您可能期望的 bash shell 语法的一部分。它恰好是一个 Bash 内置命令,所以它记录在 Bash 手册中。

还有一个外部命令可以做同样的事情;在许多系统上,它由 GNU Coreutils 包提供。

[ 等价于test 命令,只是[ 需要] 作为其最后一个参数,而test 不需要。

假设您的系统上安装了 bash 文档,如果您键入 info bash 并搜索 'test''['(撇号是搜索的一部分),您将找到 [ 的文档命令,也称为test 命令。如果您使用man bash 而不是info bash,请搜索^ *test(在行首的单词test,后跟一些空格)。

根据“Bash 条件表达式”的引用,您将看到-ne 的描述,它是数字不等式运算符(“ne”代表“不等于”)。相比之下,!=字符串不等式运算符。

您还可以在网络上找到 bash 文档。

test 命令的官方定义是 POSIX 标准(bash 实现应该相当好地符合该标准,也许还有一些扩展)。

【讨论】:

  • 我倾向于建议使用 POSIX 文档而不是 coreutils 文档。 test 毕竟是一个 POSIX 命令。
【解决方案2】:

“不等于” 所以在这种情况下,$RESULT 被测试为不等于 0。

但是,测试是按数字而非字母顺序进行的:

n1 -ne n2     True if the integers n1 and n2 are not algebraically equal.

相比:

s1 != s2      True if the strings s1 and s2 are not identical.

【讨论】:

  • 指出数字和字符串比较之间的区别的好点......这很容易被忽视