bash case 语句引用的行为与记录的一样,但请解释

bash case statement quoting behaves as documented, but please explain

c.f。 case example here
具体来说:

$: g=a*[b]; case $g in $g) echo 'unquoted pattern' ;; "$g") echo 'quoted pattern' ;; esac
quoted pattern

一个简单的字符串的行为完全符合预期 -

$: g=a; case $g in $g) echo 'unquoted pattern' ;; "$g") echo 'quoted pattern' ;; esac
unquoted pattern

我确保没有与 glob 匹配的文件,没有 shopt 选项搅浑水,并明确测试了该值:

$: echo @$g@ "@$g@" $g "$g"
@a*[b]@ @a*[b]@ a*[b] a*[b]
$: [[ $g == "$g" ]] && echo ok || echo no
ok

那么为什么呢,在这种情况下,选择第二个选项?
两者不应该评估相同的结果吗?

case 语句使用模式匹配而不是字符串相等性来将单词与每个模式进行比较。

模式 a*[b] 匹配任何以 a 开头的字符串,零个或多个字符后跟一个 b。它不匹配 字符串 a*[b],因为该字符串以 ] 结尾,而不是 b.