Jako většina programovacích jazyků, i bash skripty se někdy potřebují vypořádat se seznamem souvisejících hodnot. Nejjednodušší formou je standardní pole.
V bash je programování pole zcela odlišné, zejména pokud jde o syntaxi. Bashová pole jsou také striktně jednorozměrná, ale stále mají spoustu využití.
Základní syntaxe Bash Arrays
Vytvoření pole v bash je jednoduché. Pomocí hranatých závorek můžete inicializovat celé pole, například:
city=(Londýn Paříž Milán "New York")
(Veškerý kód z tohoto příkladu města najdete v tento GitHub Gist.)
Tím se vytvoří pole obsahující čtyři prvky, indexované od 0 do 3. Všimněte si, že čtvrtá hodnota je řetězec v uvozovkách sestávající ze dvou slov. Hodnoty obsahující mezery budete muset uvést v uvozovkách, aby bylo jasné, že nejde o samostatné hodnoty.
K jednomu prvku můžete přistupovat pomocí syntaxe hranatých závorek, která je běžná pro všechny programovací jazyky:
město[2]
Protože se jedná o bash, budete potřebovat několik upřesnění, abyste skutečně použili hodnotu ve výrazu:
- Budete muset přidat znak dolaru ($) na název proměnné.
- Budete také muset použít rovnátka ({}), aby byl název proměnné jednoznačný. Ve výchozím nastavení bude bash léčit $city[2] jako proměnná pojmenovaná město. Přidáním složených závorek řeknete bashovi, aby vyhodnotil také závorky a číslo indexu.
Standardní syntaxe přístupu k poli bash je pak:
${variable_name[index]}
Zde je úplný příklad:
#!/bin/bash
city=(Londýn Paříž Milán "New York")
echo ${city[3]}
# New York
Namísto inicializace pole najednou, můžete k němu přiřadit krok za krokem. Tento skript je delším ekvivalentem předchozího příkladu:
#!/bin/bash
město[0]=Londýn
město[1]=Paříž
město[2]=Milán
město[3]="New York"
echo ${city[3]}
# New York
Všimněte si, že v obou případech musíte být opatrní, abyste kolem znaménka rovná se nepřidali mezeru. „město[0] = Londýn“ s mezerami kolem rovnítka vygeneruje chybu.
Více použití pro pole Bash
Pole jsou ideální pro ukládání souvisejících dat. Zde je (velmi omezený) skript shellu pro získání druhé odmocniny čísla:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
echo ${sqrt[$1]}
Všimněte si, že skript používá hodnotu $1 jako index pole. $1 představuje první argument příkazového řádku, který skript obdrží, takže tento skript můžete spustit takto:
$ ./sqrt.sh 9
3
Možná jste si vědomi $ (cmd) syntaxe pro provedení příkazu a uložení jeho výstupu do proměnné. Můžete to zkombinovat se syntaxí inicializace pole, abyste získali pole souborů, se kterými můžete pracovat:
arr=( $(ls) )
Pole je často dokonalá datová struktura pro iteraci a Bash není výjimkou. Můžete procházet pole a vytisknout každý prvek nebo provést operaci s každým členem.
Můžete adresovat pole v A pro.. v smyčka, k opakování jeho obsahu. Zde je například jednoduchá smyčka, která vytiskne počet řádků v každém souboru v poli arr:
pro soubor v "${arr[@]}"; dělat
wc -l "$soubor"
Hotovo
# 3 envvary
# 547 httpd.conf
# ...
Všimněte si, že tento vzor využívá @ symbol pro načtení všech prvků z pole.
Více syntaxe pole Bash
Počet položek v poli můžete získat pomocí následujícího:
echo ${#city[@]}
# 4
Na konec standardního pole můžete přidat nový prvek takto:
arr+=(4)
Chcete-li tedy přidat páté město do seznamu:
město+=(Řím)
echo ${city[@]}
# Londýn Paříž Milán New York Řím
Chcete-li extrahovat část pole, můžete použít syntaxi, která aproximuje operaci řezu v mnoha dalších jazycích:
${arr[@]:s: n}
Tato syntaxe vrátí část pole začínající na pozici s a obsahující n položky. Můžete vynechat :n část, ze které se mají extrahovat všechny položky s až na konec seznamu.
echo ${city[@]:2:2}
# Milán v New Yorku
echo ${city[@]:3}
# New York Řím
Bash má mnoho funkcí, stačí se jen trochu naučit
Pole v bash mohou mít omezení, ale nabízejí stejné základní funkce jako většina programovacích jazyků. Ačkoli bash historicky podporoval pouze jednoduchá jednorozměrná pole, časy se mění. Nejnovější verze bash, 4, podporuje asociativní pole a negativní indexování polí.
Bez ohledu na verzi bash, kterou používáte, je důležité pochopit její nuance. I normální syntaxe proměnných má spoustu idiosynkrazií.
Vysvětlení proměnných Bash: Jednoduchý průvodce s příklady
Přečtěte si další
Související témata
- Programování
- Linux
- Programování
- Linux Bash Shell
- Skriptování
O autorovi
Bobby je technologický nadšenec, který většinu dvou desetiletí pracoval jako softwarový vývojář. V MUO je junior editorem sekce Programování. Je nadšený pro hraní her, pracuje jako šéfredaktor časopisu Switch Player Magazine a je ponořen do všech aspektů online publikování a vývoje webu.
Přihlaste se k odběru našeho newsletteru
Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!
Chcete-li se přihlásit k odběru, klikněte sem