GNU/Linux >> Znalost Linux >  >> Linux

Bash Arrays

Pole jsou jednou z nejpoužívanějších a základních datových struktur. Můžete si představit pole jako proměnnou, která v sobě může ukládat více proměnných.

V tomto článku pokryjeme pole Bash a vysvětlíme, jak je používat ve skriptech Bash.

Bash Arrays #

Bash podporuje jednorozměrné numericky indexované a asociativní typy polí. Na číselná pole se odkazuje pomocí celých čísel a na asociativní pomocí řetězců.

K číselně indexovaným polím lze přistupovat od konce pomocí záporných indexů, indexu -1 odkazuje na poslední prvek. Indexy nemusí být souvislé.

Na rozdíl od většiny programovacích jazyků prvky pole Bash nemusí mít stejný datový typ. Můžete vytvořit pole, které obsahuje řetězce i čísla.

Bash nepodporuje vícerozměrná pole a nemůžete mít prvky pole, které jsou také pole.

Neexistuje žádné omezení na maximální počet prvků, které lze uložit do pole.

Vytváření Bash Arrays #

Pole v Bash lze inicializovat různými způsoby.

Vytváření číselně indexovaných polí #

Bash proměnné jsou bez typu, libovolnou proměnnou lze použít jako indexované pole, aniž by bylo nutné ji deklarovat.

Chcete-li explicitně deklarovat pole, použijte deklaraci builtin:

declare -a array_name

Jedním ze způsobů, jak vytvořit indexované pole, je použití následujícího formuláře:

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

Kde index_* je kladné celé číslo.

Dalším způsobem, jak vytvořit číselné pole, je zadat seznam prvků v závorkách oddělených prázdným místem:

array_name=( element_1 element_2 element_N )

Když je pole vytvořeno pomocí výše uvedeného formuláře, indexování začíná na nule, tj. první prvek má index 0 .

Vytváření asociativních polí #

Na rozdíl od numericky indexovaných musí být asociativní pole před použitím deklarována.

Chcete-li deklarovat asociativní pole, použijte declare vestavěný s -A možnost (velká písmena):

declare -A array_name

Asociativní pole lze vytvořit pomocí následujícího formuláře:

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

Kde index_* může být libovolný řetězec.

Můžete také vytvořit asociativní pole pomocí níže uvedeného formuláře:

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

Operace pole #

Syntaxe polí Bash může zpočátku vypadat trochu divně, ale bude to dávat větší smysl, až si přečtete tento článek.

Referenční prvky #

Chcete-li odkazovat na jeden prvek, musíte znát index prvku.

Na jakýkoli prvek lze odkazovat pomocí následující syntaxe:

${array_name[index]}
Syntaxe pro přístup k prvku pole je podobná syntaxi většiny programovacích jazyků. Složené závorky ${} jsou vyžadovány, aby se předešlo operátorům rozšíření názvu souboru.

Vytiskneme prvek s indexem 1 :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}
Helium

Pokud použijete @ nebo * jako index se slovo rozšíří na všechny členy pole. Chcete-li vytisknout všechny prvky, které byste použili:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium

Jediný rozdíl mezi @ a * je, když tvar ${my_array[x]} je obklopen dvojitými uvozovkami. V tomto případě * expanduje na jedno slovo, kde jsou prvky pole odděleny mezerou. @ rozšíří každý prvek pole na samostatné slovo. To je zvláště důležité při použití formuláře k negramotnosti prvků pole.

Chcete-li vytisknout klíče pole, přidejte ! operátor před názvem pole:

${!array_name[index]}

Zde je příklad:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"
0 1 2 3

Délka pole #

Chcete-li získat délku pole, použijte následující formulář:

${#array_name[@]}
Syntaxe je stejná jako při odkazování na všechny prvky s přidáním # znak před názvem pole.
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}
4

Procházet polem #

Nejběžnějším způsobem iterace přes každou položku v poli je použití cyklu for:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

Výše uvedený kód iteruje pole a vytiskne každý prvek na nový řádek:

Hydrogen
Helium
Lithium
Beryllium

Zde je příklad, jak vytisknout všechny klíče a hodnoty:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Dalším způsobem, jak procházet polem, je získat délku pole a použít C style smyčka:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Přidat nový prvek #

Chcete-li přidat nový prvek do pole bash a zadat jeho index, použijte následující formulář:

my_array[index_n]="New Element"

Zde je příklad:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum

Dalším způsobem přidání nového prvku do pole bez uvedení indexu je použití += operátor. Můžete přidat jeden nebo více prvků:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel

Smazat prvek #

Chcete-li odstranit jeden prvek, musíte znát index prvku. Prvek lze odstranit pomocí unset příkaz:

unset my_array[index]

Podívejme se na příklad:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium

Závěr č.

Vysvětlili jsme, jak vytvořit numericky indexovaná a asociativní pole. Také jsme ukázali, jak iterovat pole, vypočítat délku pole a přidat a odebrat prvky.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. Jak vytvořit pole jedinečných prvků ze řetězce/pole v Bash?

  2. Bash Array Of Arrays?

  3. Pole AWK vysvětleno na 5 praktických příkladech

  1. Pole v Bash nenalezeno

  2. Chování polí ve skriptování bash a shellu zsh (počáteční index 0 nebo 1?)

  3. jak posunout hodnotu pole v bash

  1. Bash pole s příklady

  2. Výukový program Ultimate Bash Array s 15 příklady

  3. převést výstup bash `ls` na pole json