Bash Extended Globbing dá erro de sintaxe

5

Alguém pode explicar isso:

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

Esta é uma instalação do debian squeeze. Espero que o extglob interprete os colchetes como o começo de um grupo.

Obrigado,

Paul

    
por Paul 10.07.2011 / 14:12

2 respostas

9

Porque o extglob não funciona dessa maneira. Você deve colocar um dos caracteres modificadores no início da sua lista de padrões ( (txt|doc) neste caso), como segue (de 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

Especificamente, ls *.*(txt|doc) produz o comportamento que eu estou supondo que você deseja.

    
por 10.07.2011 / 14:27
2

Você pode fazer isso sem o uso de globbing estendido usando a expansão de chaves : ls *.{txt,doc}

    
por 10.07.2011 / 20:43