GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser les variables à l'intérieur de l'expansion {} sans `eval` ?

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

Linux
  1. Comment utiliser dd sous Linux sans détruire votre disque

  2. Autoriser un utilisateur à utiliser Sudo sans mot de passe ?

  3. Expansion et variables des accolades Bash ?

  4. Comment différer l'expansion variable ?

  5. Pourquoi l'expansion variable sans $ fonctionne-t-elle dans les expressions ?

Comment utiliser des variables dans Ansible Playbook

Comment utiliser des variables dans les scripts Shell

Comment utiliser ISPConfig et Seafile sans modifications manuelles des fichiers

Comment utiliser la commande echo sans retour à la ligne

Comment utiliser "yum downloadonly" pour télécharger un package sans l'installer

Comment utiliser Linux Bash Shell dans Windows 10 ?