You need to enable JavaScript to run this app. POSIX sh脚本中[ "$(...)" = *FAIL* ]匹配逻辑失效如何修复
优惠活动
大模型
产品
解决方案
定价
更多

POSIX sh脚本中[ "$(...)" = *FAIL* ]匹配逻辑失效如何修复

失效原因

POSIX 规范中,test 命令(即方括号[ ])的字符串相等比较=仅支持字面量匹配,右侧的通配符*会被当作普通字符处理,不会触发子串匹配逻辑。因此原有写法实际是在判断最后一行是否完全等于*FAIL*这个字符串,自然永远无法命中,始终走else分支返回0。

修正方案

以下两种方案均完全符合POSIX规范,无bash专属特性,兼容#!/bin/sh要求:

方案1:使用grep匹配(最常用)

grep -q是POSIX标准参数,作用是静默匹配,仅通过退出码返回是否匹配成功:

#!/bin/sh

# ........

if tail -n 1 log_file.txt | grep -q "FAIL"; then
  exit 1
else
  # some command here
  exit 0
fi

方案2:使用case语句(无外部命令调用,性能更好)

POSIX标准的case语句原生支持通配符模式匹配,不需要调用额外外部程序,执行效率更高:

#!/bin/sh

# ........
last_line=$(tail -n 1 log_file.txt)
case "$last_line" in
  *FAIL*) exit 1 ;;
  *) 
    # some command here
    exit 0
    ;;
esac

内容的提问来源于stack exchange,提问作者Nabla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:33:00