S'agit-il simplement d'une question «parce que je veux savoir» ou existe-t-il un vrai cas d'utilisation? Nous pourrions faire de la gymnastique pour le faire:
$ eval echo\ {a,b,c}\;
a
b
c
Mais je traquerais toute personne qui introduirait ce genre de commandes obscures dans nos scripts système.
Pourquoi ne pas opter pour la clarté:
$ for X in{a,b,c};do echo $X;done
Vous pourriez même vous lancer dans le porc entier et ajouter quelques nouvelles lignes et les indenter un peu afin que vous puissiez toujours comprendre ce que vous essayez de faire.
@peth - Je suppose que c'est un exemple simplifié. Si c'est aussi simple qu'une liste, alors vous avez raison. Si c'est quelque chose de plus, file-{r,b,g}{m,n,o}{x,y.z}.fooil vaut mieux utiliser le formulaire court que d'énumérer les 27 valeurs.
unpythonic
@peth - Je pensais que c'était une bonne question de suivi.
Unpythonic
je veux savoir cela depuis longtemps, merci! :)
Sirex
1
Eh bien, le cas d'utilisation était des programmes qui n'acceptent pas plus d'un fichier (par exemple), donc où l'expansion ne fonctionnerait pas. Par conséquent, ce serait bien de pouvoir facilement exécuter le programme plusieurs fois. Les forœuvres pour cela, mais il est encore plus besoin de taper: P
houbysoft
Je l'ai utilisé pour nettoyer plusieurs branches git:eval git branch -d \{ branch-a, branch-b }\;
Ce que cela montre, c'est que lorsque vous utilisez plusieurs occurrences d'expansion d'accolade au sein d'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 m'assurer que la sortie correspondait au format qui mvattend normalement ( mv oldfilename newfilename), j'ai échappé à la deuxième occurrence de l'accolade, afin qu'elle ne soit évaluée qu'après l' evalexécution de la commande initiale .
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 :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
il vaut mieux utiliser le formulaire court que d'énumérer les 27 valeurs.for
œuvres pour cela, mais il est encore plus besoin de taper: Peval git branch -d \{ branch-a, branch-b }\;
Sur la base de la réponse choisie par Mark Mann , j'ai pu dériver davantage cet exemple, qui fonctionne très bien:
Ce que cela montre, c'est que lorsque vous utilisez plusieurs occurrences d'expansion d'accolade au sein d'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 m'assurer que la sortie correspondait au format qui
mv
attend normalement (mv oldfilename newfilename
), j'ai échappé à la deuxième occurrence de l'accolade, afin qu'elle ne soit évaluée qu'après l'eval
exécution de la commande initiale .Comme la sortie ci-dessus est apparue comme prévu, j'ai ensuite pu exécuter la commande suivante:
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 :-)
la source
la source