Je to jen otázka „protože to chci vědět“, nebo pro to existuje skutečný případ použití? Mohli bychom projít nějakou gymnastikou, abychom to zvládli:
$ eval echo\ {a,b,c}\;
a
b
c
Ale ulovil bych každého, kdo vkládal tyto druhy matoucích příkazů do našich systémových skriptů.
Proč místo toho jít pro jasnost:
$ for X in {a,b,c}; do echo $X; done
Mohli byste dokonce jít na plné čáře a vložit pár nových řádků a trochu to odsadit, abyste vždy byli schopni pochopit, o co se snažíte.
Na základě vybrané odpovědi Marka Manna jsem byl schopen dále odvodit tento příklad, který funguje skvěle:
$ 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 ukazuje, je, že když používáte více výskytů expanze závorky v rámci řádku, Markův původní příklad by vytiskl každou variantu jednotlivě. Místo toho jsem chtěl použít jeho odpověď k přesunutí/přejmenování více souborů. Aby se zajistilo, že výstup odpovídá formátu mv
normálně očekává (mv oldfilename newfilename
), unikl jsem druhému výskytu expanze složené závorky, aby bylo vyhodnoceno až po počáteční eval
příkaz byl proveden.
Protože výše uvedený výstup vypadal podle očekávání, byl jsem schopen spustit následující příkaz:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
Moc děkuji Markovi za jeho originální odpověď. Prosím, hlasujte pro jeho odpověď, pokud se vám líbí, co mi jeho odpověď umožnila :-)