GNU/Linux >> Tutoriels Linux >  >> Linux

Expansion des accolades :exécuter plusieurs commandes au lieu de développer sur une seule ligne ?

Est-ce juste une question "parce que je veux savoir", ou y a-t-il un vrai cas d'utilisation? Nous pourrions faire de la gymnastique pour y arriver :

$ eval echo\ {a,b,c}\;
a
b
c

Mais je traquerais tous ceux qui mettaient ce genre de commandes obscurcissantes dans nos scripts système.

Pourquoi ne pas privilégier la clarté :

$ for X in {a,b,c}; do echo $X; done

Vous pouvez même aller jusqu'au bout et ajouter quelques retours à la ligne et les mettre un peu en retrait afin de toujours être en mesure de comprendre ce que vous essayez de faire.


Sur la base de la réponse sélectionnée de Mark Mann, j'ai pu dériver davantage cet exemple, qui fonctionne très bien :

$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak

Ce que cela montre, c'est que lorsque vous utilisez plusieurs occurrences d'expansion d'accolades dans une ligne, l'exemple original de Mark aurait imprimé chaque variation individuellement. Au lieu de cela, je voulais utiliser sa réponse pour déplacer/renommer plusieurs fichiers. Pour s'assurer que la sortie correspond au format que mv attend normalement (mv oldfilename newfilename ), j'ai échappé à la deuxième occurrence de l'expansion des accolades, afin qu'elle ne soit évaluée qu'après le eval initial commande a été exécutée.

Comme la sortie ci-dessus est apparue comme prévu, j'ai ensuite pu exécuter la commande suivante :

$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak  category_32.properties.bak  category_33.properties.bak

Un grand merci à Mark pour sa réponse originale. Veuillez voter pour sa réponse si vous aimez ce que sa réponse m'a permis de faire :-)


Linux
  1. Expansion et variables des accolades Bash ?

  2. Comment cette commande Su -c "..." semble-t-elle transmettre deux commandes au lieu d'une ?

  3. Planification des commandes par inactivité du système ?

  4. Vérification des conditions d'une ligne dans le fichier Makefile ?

  5. Serveur FTP sur une ligne

Comment exécuter des commandes Linux en arrière-plan

Comment exécuter plusieurs commandes Linux en une seule commande

Comment exécuter des commandes Sudo sans mot de passe

Comment exécuter les commandes sudo sans mot de passe

Exécuter combiner plusieurs commandes Linux en une seule ligne

Comment exécuter plusieurs commandes d'arrière-plan dans bash sur une seule ligne ?