Pole v Bash

Úvod do Bash skriptování

Alex Scriven

Data Scientist

Co je pole?

Dva typy polí v Bash:

  • Pole
    • Struktura s číselným indexováním.
    • V Pythonu se nazývá 'list', v R 'vector'.

V Pythonu: my_list = [1,3,2,4]

V R: my_vector <- c(1,3,2,4)

Úvod do Bash skriptování

Vytvoření pole v Bash

Číselně indexované pole lze v Bash vytvořit dvěma způsoby.

1. Deklarace bez přidání prvků

declare -a my_first_array

2. Vytvoření a přidání prvků najednou

my_first_array=(1 2 3)

Pozor – bez mezer kolem znaménka rovnosti!

Úvod do Bash skriptování

Pozor na čárky!

Prvky pole se v Bash neoddělují čárkami:

Toto je špatně:

my_first_array=(1, 2, 3)

Toto je správně:

my_first_array=(1 2 3)
Úvod do Bash skriptování

Důležité vlastnosti pole

  • Všechny prvky pole lze vrátit pomocí array[@]. Bash vyžaduje složené závorky kolem názvu pole při přístupu k jeho vlastnostem.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • Délka pole se zjistí pomocí #array[@]
echo ${#my_array[@]}
4
Úvod do Bash skriptování

Manipulace s prvky pole

Přístup k prvkům pole pomocí hranatých závorek.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Pozor: Bash používá nulové indexování jako Python (na rozdíl od R!)
Úvod do Bash skriptování

Manipulace s prvky pole

Nastavení prvků pole pomocí indexové notace.

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • Pozor: nepoužívejte $ při přepisování indexu, např. $my_first_array[0]=999 – to nebude fungovat.
Úvod do Bash skriptování

Manipulace s prvky pole

Použijte notaci array[@]:N:M k „výřezu" části pole.

  • N je počáteční index, M je počet vrácených prvků.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Úvod do Bash skriptování

Přidávání do pole

Přidání prvků na konec pole pomocí array+=(elements).

Například:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Úvod do Bash skriptování

(Špatné) přidávání do pole

Co se stane, když závorky kolem přidávaného prvku vynecháte? Podívejme se.

Například:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

Řetězec 10 se pouze přidá k prvnímu prvku. To není žádoucí!

Úvod do Bash skriptování

Asociativní pole

  • Asociativní pole
    • Podobné normálnímu poli, ale s páry klíč–hodnota místo číselných indexů
    • Obdoba slovníku v Pythonu nebo seznamu v R
    • Poznámka: Dostupné pouze od Bash 4. Některé moderní Macy mají starší Bash! Ověřte pomocí bash --version v terminálu

V Pythonu:

my_dict = {'city_name': "New York", 'population': 14000000}

V R:

my_list = list(city_name = c('New York'), population = c(14000000))
Úvod do Bash skriptování

Vytvoření asociativního pole

Asociativní pole lze vytvořit pouze pomocí syntaxe declare (s velkým -A).

Můžete nejprve deklarovat a prvky přidat později, nebo vše zapsat na jeden řádek.

  • Klíče uzavřete do hranatých závorek a za znaménkem rovnosti přiřaďte hodnotu.
    • Více prvků lze přidat najednou.
Úvod do Bash skriptování

Příklad asociativního pole

Vytvoříme asociativní pole:

declare -A city_details # Nejprve deklarujeme

city_details=([city_name]="New York" [population]=14000000) # Přidáme prvky
echo ${city_details[city_name]} # Přístup přes klíč vrátí hodnotu
New York
Úvod do Bash skriptování

Vytvoření asociativního pole

Alternativně lze asociativní pole vytvořit a přiřadit na jednom řádku

  • Vše ostatní zůstává stejné
declare -A city_details=([city_name]="New York" [population]=14000000)

Přístup ke klíčům asociativního pole pomocí !

echo ${!city_details[@]} # Vrátí všechny klíče
city_name population
Úvod do Bash skriptování

Let's practice!

Úvod do Bash skriptování

Preparing Video For Download...