Odpowiedzi:
Czy to tylko pytanie „bo chcę wiedzieć”, czy może jest na to prawdziwe zastosowanie? Możemy przejść przez gimnastykę, aby to zrobić:
$ eval echo\ {a,b,c}\;
a
b
c
Ale wytropiłbym każdego, kto wprowadzał tego rodzaju zaciemniające polecenia do naszych skryptów systemowych.
Zamiast tego wybierz jasność:
$ for X in {a,b,c}; do echo $X; done
Możesz nawet pójść na całość, wprowadzić kilka nowych linii i wciąć je trochę, abyś zawsze był w stanie zrozumieć, co próbujesz zrobić.
for
prace dla tego, ale to jeszcze bardziej wpisując: P
eval git branch -d \{ branch-a, branch-b }\;
W oparciu o wybraną odpowiedź Marka Manna mogłem dalej wyprowadzić ten przykład, który działa świetnie:
$ 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
To, co pokazuje, to kiedy używasz wielu wystąpień rozwinięcia nawiasu w linii, oryginalny przykład Marka wydrukowałby każdą odmianę osobno. Zamiast tego chciałem użyć jego odpowiedzi, aby przenieść / zmienić nazwę wielu plików. Aby upewnić się, że wyjście dopasowane format, który mv
normalnie oczekuje ( mv oldfilename newfilename
), uciekłem Drugie wystąpienie interpretacji nawiasów, tak, że nie będzie oceniana, aż po początkowym eval
komenda była wykonywana.
Ponieważ powyższe dane wyjściowe pojawiły się zgodnie z oczekiwaniami, byłem w stanie uruchomić następującą komendę:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
Wielkie podziękowania dla Marka za jego oryginalną odpowiedź. Proszę głosować w górę na jego odpowiedź, jeśli podoba wam się to, na co pozwoliła mi jego odpowiedź :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
, lepiej użyć krótkiej formy niż wyliczyć wszystkie 27 wartości.