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 :-)