Fórum Root.cz
Hlavní témata => Software => Téma založeno: jafy 06. 11. 2023, 23:13:41
-
Dobrý den, při spojení dvou polí v bashi "mizí" prázdný řetězec na začátku druhého pole. Nevíte proč tomu tak je?
#!/bin/bash
arr1=("" "centos" "debian" "rocky")
arr2=("alma")
# jedno pole, OK
for value in "${arr1[@]}"
do
echo $value
done
echo "po spojeni"
#spojim pole, ale zmizi prazdny retezec na zacatku pole. Proc?
arr3=(${arr1[@]} ${arr2[@]})
for value in "${arr3[@]}"
do
echo $value
done
exit 0
-------------------------------------------------
Výstup:
centos
debian
rocky
po spojeni
centos
debian
rocky
alma
-
Mas tam chybu:
arr3=("${arr1[@]}" "${arr2[@]}")
-
Děkuji, takto to funguje správně. Proč tam musí být uvozovky?
Mas tam chybu:
arr3=("${arr1[@]}" "${arr2[@]}")
-
Protože Bash a další shelly jsou primárně dělané na interaktivní práci s uživatelem a mají tendenci zahazovat všechno, co není pořádný znak jako písmeno a číslo. Většinou totiž nechceš rozlišovat mezi 'příkaz parametrA parametrB' a 'příkaz parametrA parametrB' (všimni si více mezer), nebo aby se tam před parametrA vložil třetí parametr, který je ale prázdný. Tím, že to obalíš do uvozovek, tomu řekneš "ber to přesně tak, jak to je".
Počítej s tím, že tyhle specialitky kolem mezer a prázdných hodnot tě v Bashi občas (nebo spíš často) kousnou. A pokud tohle neznáš, tak doporučuju http://redsymbol.net/articles/unofficial-bash-strict-mode/. Ušetří ti to hromadu bolení hlavy.
-
Dobrý večer, děkuji za vysvětlení.