Fórum Root.cz

Hlavní témata => Software => Téma založeno: jafy 06. 11. 2023, 23:13:41

Název: Spojení polí v Bashi a mizející prázdný řetězec
Přispěvatel: 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?

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
Název: Re:Spojení polí v bashi a "mizející" prázdný řetězec
Přispěvatel: modnar 07. 11. 2023, 00:07:09
Mas tam chybu:
Kód: [Vybrat]
arr3=("${arr1[@]}" "${arr2[@]}")
Název: Re:Spojení polí v bashi a "mizející" prázdný řetězec
Přispěvatel: jafy 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[@]}")
Název: Re:Spojení polí v bashi a "mizející" prázdný řetězec
Přispěvatel: Zopper 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.
Název: Re:Spojení polí v Bashi a mizející prázdný řetězec
Přispěvatel: jafy 07. 11. 2023, 21:36:20
Dobrý večer, děkuji za vysvětlení.