• Bash Array und leere Strings

    From Joachim H.@21:1/5 to All on Thu Mar 28 10:50:01 2024
    Hallo


    folgendes Konstrukt :


    Arr=("" "eins")
    echo ${#Arr[@]}
    for A in ${Arr[@]}; do
    echo $A
    done


    Warum wird der Fall des A als leerer String hier übergangen? Es wird
    korrekt ermittelt, dass Arr zwei Einträge hat, ich erhalte aber nur eine Ausgabe.


    Mit

    Arr=("" "eins")
    echo ${#Arr[@]}
    for I in ${!Arr[@]}; do
    A=${Arr[$I]}
    echo $A
    done


    klappt's auch mit dem leeren String "".


    Ich verstehe den Sinn nicht darin, den Leerstring im ersten Beispiel zu ignorieren.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulf Volmer@21:1/5 to All on Thu Mar 28 18:10:01 2024
    Am 28.03.24 um 10:44 schrieb Joachim H.:
    Hallo


    folgendes Konstrukt :


    Arr=("" "eins")
    echo ${#Arr[@]}
    for A in ${Arr[@]}; do
    echo $A
    done


    Warum wird der Fall des A als leerer String hier übergangen? Es wird
    korrekt ermittelt, dass Arr zwei Einträge hat, ich erhalte aber nur eine Ausgabe.


    Vermutlich kommst Du der Lösung näher, wenn Du die Ausgabe von


    echo ${Arr[@]}


    und


    echo "${Arr[@]}"


    vergleichst.


    Viele Grüße

    Ulf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Joachim H.@21:1/5 to All on Thu Mar 28 18:50:01 2024
    Am 28.03.24 um 18:00 schrieb Ulf Volmer:
    Vermutlich kommst Du der Lösung näher, wenn Du die Ausgabe von

    echo ${Arr[@]}
    und
    echo "${Arr[@]}"

    vergleichst.


    ööhm, nicht wirklich!


     Ja, da gibt es einen Unterschied in der Ausgabe, mir erschließt sich
    aber trotzdem nicht, warum ein "leerer" Array-Eintrag nicht in der
    for-Schleife berücksichtigt wird. In dem oben erstgenannten echo hat das
    Array auch zwei Einträge. Ein leerer Strings ist ja nicht Nichts (null), sondern ein String der Länge 0. Dann müsste doch auch ein String der
    Länge 0 zurückgegeben werden.


    Ich sehe jetzt, dass das mit dem Mechanismus des Expandierens in der
    Bash zu tun hat. Aber das Thema führt bei mir immer zu Kopfweh. Rein
    intuitiv hätte ich das Verhalten eher andersrum erwartet.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulf Volmer@21:1/5 to All on Thu Mar 28 19:50:01 2024
    Am 28.03.24 um 18:42 schrieb Joachim H.:

    Am 28.03.24 um 18:00 schrieb Ulf Volmer:
    Vermutlich kommst Du der Lösung näher, wenn Du die Ausgabe von

    echo ${Arr[@]}
    und
    echo "${Arr[@]}"

    vergleichst.


    ööhm, nicht wirklich!


     Ja, da gibt es einen Unterschied in der Ausgabe, mir erschließt sich
    aber trotzdem nicht, warum ein "leerer" Array-Eintrag nicht in der for-Schleife berücksichtigt wird. In dem oben erstgenannten echo hat das Array auch zwei Einträge. Ein leerer Strings ist ja nicht Nichts (null), sondern ein String der Länge 0. Dann müsste doch auch ein String der
    Länge 0 zurückgegeben werden.


    Ich sehe jetzt, dass das mit dem Mechanismus des Expandierens in der
    Bash zu tun hat. Aber das Thema führt bei mir immer zu Kopfweh. Rein intuitiv hätte ich das Verhalten eher andersrum erwartet.


    Ja. Die Shell expandiert hier Dein Array und macht dann word splitting.

    Das Kopfweh kann ich nachvollziehen. Für komplexere Daten halte ich die
    Shell auch für das falsche Tool.


    Viele Grüße

    Ulf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)