Extended Glob: Qual é a diferença na sintaxe entre? (list), * (list), + (list) e @ (list)

6

Eu tenho uma pergunta depois de ler sobre glob ampliada.

Depois de usar shopt -s extglob ,

Qual é a diferença no seguinte?

?(list): Matches zero or one occurrence of the given patterns.

*(list): Matches zero or more occurrences of the given patterns.

+(list): Matches one or more occurrences of the given patterns.

@(list): Matches one of the given patterns.

Sim, li a descrição acima que os acompanha, mas para fins práticos, não vejo situações em que as pessoas preferissem (lista) sobre * (lista). Ou seja, não vejo diferença.

Eu tentei o seguinte:

$ ls
> test1.in test2.in test1.out test2.out'

$ echo *(*.in)
> test1.in test2.in

$ echo ?(*.in)
> test1.in test2.in

Eu esperaria que $ echo ?(*.in) gerasse test1.in apenas na descrição, mas não parece ser o caso. Assim, alguém poderia dar um exemplo onde isso faz diferença em relação ao tipo de globo estendido usado?

Fonte : link

    
por fer 14.05.2015 / 15:09

2 respostas

7
$ shopt -s extglob
$ ls
abbc  abc  ac
$ echo a*(b)c
abbc abc ac
$ echo a+(b)c
abbc abc
$ echo a?(b)c
abc ac
$ echo a@(b)c
abc
    
por 14.05.2015 / 15:32
3

"Uma ou mais ocorrências" significa um ou mais dentro do mesmo nome de arquivo, e não um ou mais nomes de arquivo correspondentes. foo?(.in).x corresponde a foo.in.x , enquanto foo*(.in).x também deve corresponder a foo.in.in.x

    
por 14.05.2015 / 15:37