Bash 扩展 Globbing 给出语法错误

Bash 扩展 Globbing 给出语法错误

有人能解释一下吗:

$ bash
$ shopt -s extglob
$ ls *.(txt|doc)
bash: syntax error near unexpected token `('
$ shopt extglob
extglob         on

这是 debian squeeze 安装。我期望 extglob 将括号解释为组的开头。

谢谢,

保罗

答案1

因为 extglob 不是这样工作的。您必须将其中一个修饰符放在模式列表的开头 ((txt|doc)在本例中),如下所示 (来自man bash):

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

具体来说,ls *.*(txt|doc)产生我猜测你想要的行为。

答案2

您可以使用以下方法完成此操作,而无需使用扩展的通配符括号扩展ls *.{txt,doc}

相关内容