Digamos que tengo los siguientes archivos:
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
Pensé el siguiente comando
print -l foo/*~{type_B*}
imprimiría todo debajo, foo
excepto las cosas que comienzan con type_B
pero no lo hace, en su lugar, imprime todo debajo de foo:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
También intenté print -l foo/*~type_B
y obtuve lo mismo.
¿Cómo funciona el comodín de excepción ~
en zsh?
shell-script
zsh
wildcards
Amelio Vazquez-Reina
fuente
fuente
foo/*~*/type_A*
? ¿El segundo se*
expande a todas las carpetas del directorio de trabajo, o es lo suficientemente inteligente como para expandirlofoo
?print *~**/*
en el/
directorio), supongo que primero expande el primer patrón y luego elimina todas las coincidencias que se ajustan al patrón de exclusión.~
es puramente textual, la parte antes de que se~
expanda como siempre lo haría, luego la parte posterior se quita las coincidencias. Ofjofel Una mejor prueba seríaprint /**/*~*
: puede observar que atraviesa todo el árbol, incluso si no imprime nada.zsh tiene el
^
operador global cuando EXTENDED_GLOB está activado. Parece el ajuste perfecto para su situación declarada:Significa "hacer coincidir cualquier cosa, excepto lo que coincida con el siguiente patrón", pero su efecto se limita a la parte del patrón entre barras, o entre el comienzo del patrón y la primera barra, o (como en este caso) entre las últimas barra oblicua y el final del patrón.
Puede ver las opciones de zsh actualmente habilitadas con:
Y deshabilita EXTENDED_GLOB con:
fuente