Spojení polí v Bashi a mizející prázdný řetězec

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?

Kód: [Vybrat]
#!/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:

Kód: [Vybrat]
centos
debian
rocky
po spojeni
centos
debian
rocky
alma
« Poslední změna: 07. 11. 2023, 08:03:43 od Petr Krčmář »


modnar

Re:Spojení polí v bashi a "mizející" prázdný řetězec
« Odpověď #1 kdy: 07. 11. 2023, 00:07:09 »
Mas tam chybu:
Kód: [Vybrat]
arr3=("${arr1[@]}" "${arr2[@]}")

Re:Spojení polí v bashi a "mizející" prázdný řetězec
« Odpověď #2 kdy: 07. 11. 2023, 00:49:37 »
Děkuji, takto to funguje správně. Proč tam musí být uvozovky?


Mas tam chybu:
Kód: [Vybrat]
arr3=("${arr1[@]}" "${arr2[@]}")

Zopper

  • *****
  • 786
    • Zobrazit profil
Re:Spojení polí v bashi a "mizející" prázdný řetězec
« Odpověď #3 kdy: 07. 11. 2023, 08:00:19 »
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.

Re:Spojení polí v Bashi a mizející prázdný řetězec
« Odpověď #4 kdy: 07. 11. 2023, 21:36:20 »
Dobrý večer, děkuji za vysvětlení.