Disons que j'ai les fichiers suivants:
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
Je pensais que la commande suivante
print -l foo/*~{type_B*}
imprimerait tout sous foo
sauf les choses qui commencent par type_B
mais ce n'est pas le cas, à la place il imprime tout sous foo:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
J'ai aussi essayé print -l foo/*~type_B
et obtenu la même chose.
Comment fonctionne le caractère générique d'exception ~
dans zsh?
shell-script
zsh
wildcards
Amelio Vazquez-Reina
la source
la source
foo/*~*/type_A*
? Le second se*
développe-t-il dans tous les dossiers du répertoire de travail ou est-il suffisamment intelligent pour se développer uniquementfoo
?print *~**/*
dans le/
répertoire), je suppose qu'il développe d'abord le premier modèle, puis supprime toutes les correspondances qui correspondent au modèle d'exclusion.~
est purement textuel, la partie avant l'~
expansion comme toujours, puis la partie après supprime les correspondances. @Jofel Un meilleur test seraitprint /**/*~*
: vous pouvez observer qu'il parcourt tout l'arbre, même s'il finit par ne rien imprimer.zsh a l'
^
opérateur glob lorsque EXTENDED_GLOB est activé. Cela semble être parfaitement adapté à votre situation:Cela signifie «faire correspondre n'importe quoi, sauf ce qui correspond au modèle suivant», mais son effet est limité à la partie du modèle entre les barres obliques, ou entre le début du modèle et la première barre oblique, ou (comme dans ce cas) entre le dernier barre oblique et fin du motif.
Vous pouvez afficher les options zsh actuellement activées avec:
Et désactivez EXTENDED_GLOB avec:
la source