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

ksh模式匹配疑问:ab!(cd)*匹配abcdef12与手册描述不符

ksh扩展模式匹配!(cd)的逻辑说明

你遇到的问题核心是误解了!(pattern-list)的匹配规则:它匹配的是任何与括号内模式完全不相等的字符串片段,而非“不包含该模式的片段”。

你的例子拆解

执行命令:

$ [[ "abcdef12" == ab!(cd)* ]] && echo matched
matched

匹配逻辑如下:

  1. 字符串开头的ab与模式的ab完全匹配;
  2. 模式中的!(cd)需要匹配一段不等于cd的内容——这里它可以匹配单个字符c(显然c≠cd);
  3. 最后的*匹配剩余的def12;
    整个模式因此匹配成功。

如何实现“排除包含cd的内容”

如果你想要匹配ab开头且后续内容**不包含cd**的字符串,需要调整模式为ab!(*cd*),此时abcdef12会因为包含cd而无法匹配:

$ [[ "abcdef12" == ab!(*cd*) ]] && echo matched
# 无输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:40:13