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

POSIX标准中case构造的格式定义是否存在错误?

POSIX case语句格式的文档矛盾问题

POSIX规定:

case构造的格式如下:

case word in
    [(] pattern1 ) compound-list ;; 
    [[(] pattern[ | pattern] ... ) compound-list ;;] ...
    [[(] pattern[ | pattern] ... ) compound-list]
esac

从这个格式描述来看,第一个分支似乎不允许使用模式交替(即多个模式用|分隔)。但实际主流shell实现都支持第一个分支使用模式交替,比如以下测试:

$ for cmd in bash dash 'busybox sh' ksh; do
> $cmd -c 'case a in a|b|c) echo ok ;; *) echo no ; esac'
> done
ok
ok
ok
ok
$

同时,该文档下方的语法规则定义也和上述格式描述不符:

case_clause      : Case WORD linebreak in linebreak case_list    Esac
                 | Case WORD linebreak in linebreak case_list_ns Esac
                 | Case WORD linebreak in linebreak              Esac
                 ;
case_list_ns     : case_list case_item_ns
                 |           case_item_ns
                 ;
case_list        : case_list case_item
                 |           case_item
                 ;
case_item_ns     :     pattern ')' linebreak
                 |     pattern ')' compound_list
                 | '(' pattern ')' linebreak
                 | '(' pattern ')' compound_list
                 ;
case_item        :     pattern ')' linebreak     DSEMI linebreak
                 |     pattern ')' compound_list DSEMI linebreak
                 | '(' pattern ')' linebreak     DSEMI linebreak
                 | '(' pattern ')' compound_list DSEMI linebreak
                 ;
pattern          :             WORD         /* Apply rule 4 */
                 | pattern '|' WORD         /* Do not apply rule 4 */
                 ;

这是否属于标准文档中的错误?尤其是pattern1里的1看起来像是]的笔误,仿佛该行内容有丢失或损坏。该格式描述文本最早可追溯至2004版POSIX标准。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:22