Puis-je utiliser des variables dans {}
expansion sans faire appel à eval
? Si oui, comment ?
Cela ne fonctionne pas :
$ touch 1.foo 1.bar
$ ls 1.{foo,bar}
1.bar 1.foo
$ extensions=foo,bar
$ ls 1.{$extensions}
ls: cannot access 1.{foo,bar}: No such file or directory
Cela fonctionne avec eval
:
$ eval ls 1.{$extensions}
1.bar 1.foo
Réponse acceptée :
L'expansion des accolades se produit très tôt pendant l'expansion (la première chose, en fait), avant l'expansion variable. Pour effectuer une extension d'accolade sur le résultat d'une extension de variable, vous devez utiliser eval
.
Vous pouvez obtenir le même effet sans eval
si vous faites des extensions
un motif générique au lieu d'un motif d'accolade. Définissez le extglob
possibilité d'activer des modèles de type ksh.
shopt -s extglob
extensions='@(foo|bar)'
ls 1.$extensions