Digamos que tenho os seguintes arquivos:
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
Eu pensei o seguinte comando
print -l foo/*~{type_B*}
imprimiria tudo em menos, foo
exceto as coisas que começam com type_B
mas não o faz; em vez disso, imprime tudo em foo:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
Eu também tentei print -l foo/*~type_B
e consegui a mesma coisa.
Como o curinga de exceção ~
funciona no zsh?
shell-script
zsh
wildcards
Amelio Vazquez-Reina
fonte
fonte
foo/*~*/type_A*
funciona? O segundo se*
expande para todas as pastas do diretório de trabalho ou é inteligente o suficiente para se expandir somente parafoo
?print *~**/*
no/
diretório), suponho que ele primeiro expanda o primeiro padrão e remova todas as correspondências que se ajustem ao padrão de exclusão.~
é puramente textual, a parte antes da expansão se~
expande como sempre, e a parte após a remoção das correspondências. Ajofel Um teste melhor seriaprint /**/*~*
: você pode observar que ele atravessa a árvore inteira, mesmo que acabe imprimindo nada.O zsh possui o
^
operador glob quando EXTENDED_GLOB está ativado. Parece o ajuste perfeito para sua situação declarada:Significa "combinar qualquer coisa, exceto o que corresponde ao padrão a seguir", mas seu efeito é limitado à parte do padrão entre barras, ou entre o início do padrão e a primeira barra, ou (como neste caso) entre a última barra. barra e o fim do padrão.
Você pode visualizar as opções do zsh atualmente ativadas com:
E desative EXTENDED_GLOB com:
fonte