Considere que tenho um conjunto de sete arquivos:
item1_data
item2_data_more
item3_data
item4_data
item5_data_more
other6_data
other7_data_more
e quero combinar os três que começam com item
mas não terminam com more
. Dado que este é um cenário de exemplo, você deve aceitar que não é suficiente corresponder ao padrão de correspondência positivo item*data?
(ou qualquer variante trivial).
Estou usando bash
com extglob
habilitado. Para casos simples, a descrição na página de manual é suficiente (" !(pattern‐list)
Corresponde a qualquer coisa, exceto a um dos padrões fornecidos "). No entanto, aqui preciso conseguir uma correspondência item
negativa para data
. Finalmente encontrei um que funciona, mas o que não entendo é por que funciona, mas outros falham.
shopt -s extglob # Enable extended globbing
touch {item{1,3,4},other6}_data {item{2,5},other7}_data_more # Example data set
ls !(*more) # Non-"item" files too
item1_data item3_data item4_data other6_data
ls item*!(more) # All "item" files
item1_data item2_data_more item3_data item4_data item5_data_more
ls item!(*more) # Works as required
item1_data item3_data item4_data
Por que o segundo falha e o terceiro é bem-sucedido? Estou pensando que o curinga deveria ser válido em qualquer posição - mas claramente não é. Alguém pode me iluminar, por favor.