有人能解释一下吗:
$ 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}