Snažím se používat slovníky a narazil jsem na divné chování. Když vytvořím takový slovník:
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
Poslední prvek „prd“ bude vytištěn na obrazovku, nikoli na první. Odstranění všech položek kromě první bude mít za následek správný výstup. Nejsem si jistý, co dělám špatně, protože každý příklad kódu, na který jsem se podíval, používá slovníky jako výše. Vidí někdo moji chybu?
Zdravím
Komentáře
Odpovědět
Myslím, že komentář @Yurko je správná cesta.
S bash před verzí 4 (například /bin/bash
pro Mac):
- řádek
declare -A
vydá chybu (declare: -A: invalid option
) a pole je není deklarováno . - druhý řádek vytvoří indexované pole: protože index je vyhodnocen jako aritmetický výraz
- v aritmetických výrazech bash: „holá“ slova jsou považována za názvy proměnných; nenastaveným proměnným je dána nulová hodnota
Proto je každý řetězec přiřazen index 0
.
Zkuste toto:
declare -p servers
a měl by se zobrazit výstup
declare -a servers="([0]="prd")"
servers
bylo místo asociativního pole pole. Zkontrolujte překlepy a zkontrolujte, zda je verze bash alespoň 4,0 (první, která podporuje asociativní pole).