kann das Bash-Array scheinbar nicht mit neuen Elementen füllen, wenn der Operator '+ =' verwendet wird


1

Wie der Titel schon sagt. Es wird versucht, ein Array aus der Ausgabe der Zenity-Checkliste zu füllen. Hier ist die Funktion, die ich ausführen möchte, die jedoch fehlschlägt:

function fSongType() {
    mType=$(zenity --list --title "Random song list generator" --text "Enter path from which to randomly choose songs:" --width="300" --height="360" --radiolist --column "Pick" --column "Music type" --print-column=2 FALSE All FALSE Baby FALSE Children FALSE "Easy Peasy" FALSE Holiday FALSE Instrumental FALSE "Rock Classics" TRUE "Rock Next Gen" FALSE "Rock Next Gen Heavy" FALSE "Rock Next Gen Light" FALSE "Rock Pop" FALSE Spiritual FALSE Thai|sed -r 's/[ ]{1,}//g') ; echo "\$mType: ${mType}"

    # create an array for the output of user checklist input returned to var '$mType"
    mTypeAr=()
    cntr=0
    until [[ -z "$mType" ]] ; do
        mTypeAr+=$(echo "$mType"|sed -r 's/^[|]{0,1}([a-zA-Z]*)[|]{0,1}.*$/\1/') ; echo "\$mTypeAri[$cntr]: ${mTypeAr[$cntr]}"
        mType=$(echo "$mType"|sed -r 's/^[|]{0,1}[a-zA-Z]*(|.*)$/\1/') ; echo "\$mType: ${mType}"
        ((cntr++))
    done
}

Nachfolgende Terminalausgabe:

${mTypeAr[0]}: Instrumental|RockClassics|RockNextGen|RockClassics|RockNextGen|RockNextGenInstrumentalRockClassics|RockNextGenRockClassicsRockNextGenRockNextGenInstrumentalRockClassics|RockNextGen
$mType: |RockClassics|RockNextGen
${mTypeAr[1]}: 
$mType: |RockNextGen
${mTypeAr[2]}: 
$mType:

Aus (mir) unbekannten Gründen wird die Ausgabe von zenity dem ersten Element im Array zugewiesen. Wenn ich jedoch die Array-Zuweisung mit der Variable '$ cntr' ändere, werden die Array-Elemente wie erwartet ausgefüllt.

# create an array for the output of user checklist input returned to var '$mType"
    mTypeAr=()
    cntr=0
    until [[ -z "$mType" ]] ; do
        mTypeAr["$cntr"]=$(echo "$mType"|sed -r 's/^[|]{0,1}([a-zA-Z]*)[|]{0,1}.*$/\1/') ; echo "\$mTypeAri[$cntr]: ${mTypeAr[$cntr]}"
        mType=$(echo "$mType"|sed -r 's/^[|]{0,1}[a-zA-Z]*(|.*)$/\1/') ; echo "\$mType: ${mType}"
        ((cntr++))
    done

Nachfolgende Terminalausgabe:

$mType: Instrumental|RockClassics|RockNextGen
${mTypeAr[0]}: Instrumental
$mType: |RockClassics|RockNextGen
${mTypeAr[1]}: RockClassics
$mType: |RockNextGen
${mTypeAr[2]}: RockNextGen
$mType:

Ich möchte die Variable '$ cntr' und die Echos verlieren, sobald alles wie erwartet funktioniert. Ich bin mir sicher, dass das Problem etwas Offensichtliches ist, das mir fehlt. Aber Hund weg, wenn ich es nicht sehen kann, weil ich es angeschaut habe. Jede Hilfe dankbar.

Antworten:


0

array+=stringhängt "string" an das erste Element des Arrays an; Um es als neues Element hinzuzufügen, verwenden Sie array+=(string)stattdessen. In Ihrer Funktion bedeutet dies:

mTypeAr+=($(echo "$mType"|sed -r 's/^[|]{0,1}([a-zA-Z]*)[|]{0,1}.*$/\1/'))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.