Rozšíření ortézy je užitečná technika pro generování seznamů řetězců, které lze použít ve skriptech a aliasech a na příkazovém řádku Linuxu. Ušetřit čas a vyhnout se chybám zadáním méně.
Rozšíření ortézy
Před bash shell provede příkaz V okně terminálu nebo řádku ve skriptu zkontroluje, zda je třeba provést libovolné substituce na příkazu. Názvy proměnných jsou nahrazeny jejich hodnotami, aliasy jsou nahrazeny příkazy, které jsou zkráceny, a jakákoliv expanze se provádí. Rozšíření ortézy je jedna forma expanze podporované bash.
Rozšíření ortézy je k dispozici v moderních skořápkách, ale může mi chybět z několika starých skořápek. Pokud se chystáte použít rozšiřování ortézy ve skriptech, ujistěte se, že vyvoláte shell, který podporuje rozšiřování oboru, jako je Bash:
Pro naše příklady používáme bash.
Generování seznamů řetězců se mohou zdát více z novinky než výhody, ale nabízí určitou funkčnost, která může ušetřit čas a stisknutí kláves. Často může poskytnout jednoduché a elegantní řešení problému nebo požadavku.
Jednoduché rozšíření
Mezi dvojicí rovnátka "{}" je obsažena roztažnost čeledí. Může to být seznam čárkami oddělených předmětů nebo specifikátor rozsahu. Prostory nejsou povoleny uvnitř rovniných, pokud jste zabalili řetězec v uvozovkách "
"
. "
Pro seznam odděleného čárkami, proces expanze vezme každý prvek na otočení a předává jej příkazu volání. V tomto příkladu je to
echo
to jednoduše
Vytiskne je do okna terminálu
. Všimněte si, že čárky jsou ignorovány.
echo {jeden, dva, tři, čtyři}
Seznam může být slov nebo číslice.
echo {1,2,3,4}
Objednávka prvků seznamu je zcela libovolný.
ECHO (4,2,3,1)
Rozsah expanze má start a koncový charakter spojený se dvěma obdobími "
..
"Bez jakéhokoliv mezery. Všechny chybějící prvky seznamu jsou poskytovány automaticky expanzí, takže je vytvořen celý rozsah od počátečního znaku ke konci znaku.
To bude tisknout číslice od 1 do 10.
echo {1..10}
Číslování je libovolné. Nemusí to začít na jednom.
echo {3..12}
Rozsahy mohou být specifikovány tak, aby běžely dozadu. To bude generovat seznam od pěti dolů na jeden.
echo {5..1}
Rozsahy mohou zahrnovat negativní čísla.
echo {4 ..- 4}
Jak jsme dříve ukázali, rozsah má začátek a konec charakter . Nemusí to být číslo. Může to být dopis.
echo {q..v}
Dopisy mohou také běžet dozadu.
echo {f..a}
Použití roztažnosti čeledí s smyčkami
Můžete použít rozšiřování ortézy s rozsahy v smyčkách ve skriptech.
Pro i v {3..7}
dělat
echo $ I.
provedeno
Rozšiřovací rozsahy oborů umožňují používat znaky jako proměnná smyčka.
Pro i v {m..q}
dělat
echo $ I.
provedeno
Smyčky se obvykle používají ve skriptech, ale není nic, co by vám mohlo zastavit, abys je zadali do příkazového řádku, abyste viděli, co se stane.
pro i v {3..7}; echo $ i; provedeno
pro i v {m..q}; dělat echo $ i; provedeno
Zřetězení a Hnízdění
Dvě sousední rozšíření nepůsobí nezávisle jeden po druhém. Oni spolupracovat. Každý prvek v první rozšíření je působeno každý prvek v druhé rozšíření.
echo {q..v} {1..3}
Expanze mohou být také vnořené. Nested expanze bude působit na prvek bezprostředně předcházející jej.
echo {díl 1, část-2 {a, b, c, d}, část-3}
Můžete také vnořit expanze tím, že vytvoří seznam oddělený čárkami rozsah rozšíření.
echo {{5..0}, {1..5}}
Preambule a Postscript
Můžete umístit text před a po rozšíření rozpěry ke zrušení tohoto textu zahrnuty ve výsledcích expanzi. Text postaveni před rozšířením se nazývá preambule, zatímco textový umístěn za rozšíření ortéza se nazývá postscript.
Tento příkaz používá preambuli.
echo kapitola {1..3}
Tento příklad používá doušku:
echo {obsah, papír, bilbiography} .md
A tento příkaz používá obojí.
echo kapitola- {1..4} .md
Rozšiřování názvy souborů a adresářů
Jak jste asi uhodli teď, jeden z hlavních využití výztuhou expanze je vytvořit názvy souborů a adresářů, které mohou být předány do jiných příkazů. Byli jsme s použitím
echo
jako pohodlný způsob, jak přesně zjistit, co se stane, když je expanzní spuštěno. Můžete nahradit libovolný příkaz, který trvá názvy souborů nebo názvy adresářů jako vstup a využití ortézy expanzi s ní.
rychle
vytvořit nějaké soubory
použijte
dotek
:
dotykové file {1..4} .txt
ls * .txt
Pokud máte mnoho souborů se stejným základním názvem, ale různých přípon souborů a chcete provést operaci na podmnožině z nich, může rovnátka rozšíření pomoci. Zde se budeme kompresi podmnožinu souborů, které mají „program“, jako basename do souboru ZIP s názvem „source-code.zip.“
Vývojové adresáře obsahují velké množství souborů, které budou mít stejný názvem jako svého hlavního programu. Obvykle nechcete zálohovat nebo distribuovat soubory jako „.o“ objektových souborů. Jedná se o elegantní způsob, jak obsahovat pouze typy souborů zájmu.
zip zdrojový kód programu {.c, .h, CSS}
Tento příkaz vytvořit kopii souboru a připojit „.bak“ k němu, takže záložní kopii původního souboru. Zajímavý je třeba uvést, že expanze výztuha obsahuje čárkami oddělený, ale první prvek je prázdný. Kdybychom není zahrnuta čárku, expanze by se neuskutečnily.
cp výztuha / nové / prog-1.C {,. Bak}
ls výztuha / nové / prog-1.c.bak
Chcete-li provést nějakou akci na dva soubory v různých adresářích, můžeme použít expanzi rovnátka v cestě k souborům.
V tomto příkladu je „výztuha“ adresář obsahuje dva podadresáře, jeden s názvem „nové“ a jeden s názvem „staré“. Obsahují různé verze stejné sady souborů se zdrojovým kódem. Budeme používat
diff
naprogramovat vidět rozdíly mezi oběma verzemi „prog-1.c.“
RP výztuha / {nový, starý} /prog-1.c
Pokud máte standardní kostru adresářů, které potřebujete k vytvoření na začátku projektu, můžete je rychle vytvořit pomocí expanze závorek. . \ T
mkdir
-p.
Možnost (rodič)
Vytváří všechny chybějící nadřazené adresáře
když se vytvoří adresář dítě.
mkdir -p {zdroj, sestavení, člověk, nápovědy {/ stránky, / Yelp, / obrazy}}
strom
Můžete použít ortéza expanzi
wget
na
stahovat více souborů
.
V tomto příkazu, budeme stahovat soubory ze dvou adresářů, nazvaný „test1“ a „test2“. Každý adresář obsahuje dva soubory s názvem „Picture1“ a „obrázek2.“
wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg
Výpis souborů vám ukáže soubory, které byly získány a jak
wget
přejmenuje soubory, aby se zabránilo název střetům s existujícími soubory.
ls obrázku *. *
Obejmout Brace
Zdá se, že expanze ortéza je další z Linux je nejlépe střeženým tajemstvím . Mnoho lidí mi říct, že jsem nikdy neslyšel o rozšíření ortéza, zatímco jiní mne informoval, že je to jedna z jejich oblíbených příkazového řádku triků.
Zkusit to a že to může najít svou cestu do vašeho souboru příkazového řádku go-to triků.