GNU/Linux >> Znalost Linux >  >> Linux

Expanze závorky:spustit několik příkazů místo rozbalení na jednom řádku?

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


Linux
  1. V jakém pořadí se spouštějí zřetězené příkazy?

  2. Expanze závorky Bash a proměnné?

  3. Plánování příkazů podle nečinnosti systému?

  1. Kontrola stavu jednoho řádku v Makefile?

  2. Jak spustit více příkazů, které mají &v jednom příkazovém řádku?

  3. Proveďte kombinaci více příkazů Linuxu na jednom řádku

  1. Jak spustím více příkazů na pozadí v bash na jednom řádku?

  2. argumenty příkazového řádku pro spuštění dockeru

  3. Převod pěkného tisku JSON na jeden řádek