Le manuel bash (j'utilise la version 4.3.42 sur OSX) indique que la barre verticale '|' Le caractère est utilisé comme séparateur pour plusieurs modèles de fichier dans l'agrégation de fichiers. Ainsi, ce qui suit devrait fonctionner sur mon système:anomalie de globbing de fichier bash
projectFiles=./config/**/*|./support/**/*
Cependant, le second motif donne une « Autorisation refusée » sur le dernier fichier qui se trouve dans cette structure de répertoire de sorte que le motif est jamais résolu en ProjectFiles. J'ai essayé des variations sur ce sujet, y compris envelopper les motifs entre parenthèses,
projectFiles=(./config/**/*)|(./support/**/*)
qui est disposé dans le manuel, mais cela ne fonctionne pas non plus.
Des suggestions sur ce que je fais mal?
Pouvez-vous lier la partie pertinente de ce manuel? Dans le script shell, '|' est utilisé pour le piping entre les programmes. Votre erreur "permission denied" est d'essayer d'exécuter quoi que ce soit './support/**/*' résout. –
En outre, la globalisation n'est pas effectuée * du tout * lors d'une affectation simple; essayez 'foo = *', puis comparez 'echo" $ foo "' avec 'echo $ foo'. La globalisation se produit pendant l'assignation * array *; voir 'foo = (*)'; echo "$ {foo [@]}" '. – chepner
Notez que vous pouvez le faire sans extglob, './ {config, support}/**/*', qui se développerait juste avec le chemin avec config et le chemin avec l'espace de support délimité, puis faire une correspondance de modèle. Ou './@ (config | support)/**/*' avec extglob. L'un ou l'autre semble plus propre. – BroSlow