[BASH] Brace Expansion

Wednesday 9.7.2014 21:39:57, Jakuje

Kategorie: Programování

Že jste ještě nikdy neviděli v bashi napsané toto?

Zdrojový kód:
mkdir /usr/local/src/bash/{old,new,dist,bugs}

A k čemu to slouží? V českém překladu to lze nazvat "Expanze závorek" a jedná se o mocný nástroj pokud člověk potřebuje pracovat s více soubory v rámci jednoho příkazu. Pod pojmem "Brace expansion" je zahrnuto několik syntaktických forem, které je dobré znát, pokud člověk pracuje často v bashi.

Jedná se o mechanismus generování řetězců, velmi podobný "Filename Expansion".

Formy příkazu

První formou je výše zmíněný výčet, který obsahuje jednotlivé části, které jsou použity ve výsledných řetěcích. Výše zmíněný příklad se tedy rozvine na seznam celých cest k adresážům umístěným ve složce /usr/local/src/bash/.

Druhou formou je interval, který má formu {START..KONEC..INKREMENT}, přičemž inkrement je nepovinný a pokud není zadán, použije se 1 nebo -1. Příkladem může být výběr souborů jména daného rozsahem čísel:

Zdrojový kód:
ll /dev/tty{0..16}

Tato forma také umí pracovat se sekvencemi znaků.

A to nejlepší na závěr, tyto příkazy lze vnořovat! Pokud bychom tyto znaky chtěli použít, aby nebyla provedena expanze, je potřeba znaky "{", případně "," escapovat pomocí zpětného lomítka.

Mým oblíbeným použitím je zobrazení rozdílu dvou souborů v různých projektech:

Zdrojový kód:
meld {zkusebna,akzk}/module/Menu.php
# provede expanzi na:
meld zkusebna/module/Menu.php akzk/module/Menu.php

Diskuse:

:
:
:

 
    

Podbarvená pole označená hvězdičkou jsou povinná!