为什么使用通配符时 Bash 条件不对称?

wca*_*art 5 bash

假设我有以下 Bash 片段:

if [[ "$foo" == *"$bar"* ]] ; then
  echo 'condition is true'
fi
Run Code Online (Sandbox Code Playgroud)

在英语中,您可能会用以下代码描述上述代码:ifbarfoothen的子字符串...

但是,为什么当我们切换条件的两边时,我们没有得到相同的结果?

if [[ *"$bar"* == "$foo" ]] ; then
  echo 'condition is true'
fi
Run Code Online (Sandbox Code Playgroud)

也许我对通配符的评估时间有误解?

tha*_*guy 10

这是一个明确的设计决策。这是man bash

当使用 == 和 != 运算符时,运算符右侧的字符串被认为是一个模式并根据描述的规则进行匹配

路径名扩展不在 中执行[[ .. ]],因此围绕它的常规规则不适用。

将两者都视为一种模式会很奇怪。应该[[ a* == [a]* ]]是 true 因为右边的模式匹配左边的字符串,false 因为左边的模式不匹配右边的字符串,还是 true 因为两个模式匹配相同的字符串集?