$ 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
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
"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