extglob 行为,特别是在 bash 中使用 *(patternList) 时

extglob 行为,特别是在 bash 中使用 *(patternList) 时

我正在尝试使用 extglob,但是,在阅读手册页之后,我对 *(patternList) 的操作方式感到困惑。假设我使用以下命令:

touch A  Ax  Axxx  Axxxx  Ay  X  X.bak  x  xx  xxxx 
ls A*(xx)

为什么这只打印 A Axxxx. Axxx 不是也恰好包含一次 xx 吗?此外,为什么 Ay 没有被打印,因为它出现了 0 次 xx?

答案1

该模式必须与整个名称匹配,而不仅仅是名称的前缀。

Ay不匹配,A*(xx)因为它不包含A后跟任意数量的xxy与模式不匹配。Ay确实匹配A*(xx)yA*(xx)?A*(xx)*

同样,Axxx不匹配,A*(xx)因为它不包含A后跟任何数量的xxAxxx确实匹配A*(x)A后跟 3 次x)、A*(xx)xA后跟 1 次xx后跟x)、A*(xx)?A*(xx)*等。

答案2

Axxx 不是也恰好包含一次 xx 吗?

确实如此,但它还有一个x与模式不匹配的附加内容A*(xx)。它将被A*(xx)?例如匹配。

此外,为什么 Ay 没有被打印,因为它出现了 0 次 xx?

同样,因为模式中没有任何内容与尾随y.

我想归根结底是 glob 是整个字符串火柴。

相关内容