You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中比较两个字符串变量始终输出相等的原因排查

问题根因

该Bash脚本判断逻辑始终不符合预期的核心原因是:字符串比较运算符==两侧未添加空格,导致Bash根本没有执行预期的字符串相等比较,而是将整段判断内容识别为普通字符串,执行了非空判断。
具体规则说明:

  • 在Bash的[[ ... ]]条件判断语法中,运算符、操作数与括号之间必须用空格分隔,否则解析器不会将==识别为比较运算符
  • 当if后跟随的判断目标是一个非空字符串时,Bash会直接判定条件为真(对应命令退出码为0)
    代码中写的"$foo"=="$bar"不会被解析为「比较变量foo和bar的值是否相等」,而是会被识别为拼接后的普通字符串,代入示例变量值就是hello==h——该字符串非空,因此无论foo和bar的实际值是否相等(只要拼接结果不为空),判断条件永远成立,就会固定输出"they are equal"。
修复方案

在比较运算符==两侧补充空格,让Bash正确识别比较逻辑即可,修复后的可正常运行代码如下:

#!/bin/bash

foo="hello"
bar="h"
# 注意 == 运算符两侧必须保留空格
if [[ "$foo" == "$bar" ]]; then
        echo "they are equal"
else
        echo "they are not equal"
fi

补充提示:该空格规则对Bash所有条件判断语法生效,无论是使用[[ ]]关键字还是[ ](即test命令)做判断,运算符、括号和相邻操作数之间都必须保留空格,否则会触发逻辑错误或语法报错。

内容的提问来源于stack exchange,提问作者The Hardware Vigilante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 08:31:09