não parece preencher o array bash com novos elementos usando o operador '+ ='

1

Como o título diz. Tentando preencher uma matriz da saída da lista de verificação do zenity. Aqui está a função que quero executar, mas falha:

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}.*$//') ; echo "\$mTypeAri[$cntr]: ${mTypeAr[$cntr]}"
        mType=$(echo "$mType"|sed -r 's/^[|]{0,1}[a-zA-Z]*(|.*)$//') ; echo "\$mType: ${mType}"
        ((cntr++))
    done
}

Saída de terminal subseqüente:

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

Portanto, por razões desconhecidas (para mim), a saída do zenity é atribuída ao primeiro elemento da matriz. Mas, se eu modificar a atribuição da matriz usando o '$ cntr' var, os elementos da matriz serão preenchidos como esperado.

# 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}.*$//') ; echo "\$mTypeAri[$cntr]: ${mTypeAr[$cntr]}"
        mType=$(echo "$mType"|sed -r 's/^[|]{0,1}[a-zA-Z]*(|.*)$//') ; echo "\$mType: ${mType}"
        ((cntr++))
    done

Saída de terminal subseqüente:

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

Eu quero perder o '$ cntr' var e o echo quando tudo estiver funcionando como esperado. Tenho certeza de que o problema é algo óbvio que estou perdendo; mas o cachorro se foi, se eu não posso vê-lo por olhar para ele. Qualquer ajuda apreciada.

    
por nanker 26.02.2014 / 22:58

1 resposta

0

array+=string acrescenta "string" ao primeiro elemento da matriz; para adicioná-lo como um novo elemento use array+=(string) . Na sua função, isso significa usar:

mTypeAr+=($(echo "$mType"|sed -r 's/^[|]{0,1}([a-zA-Z]*)[|]{0,1}.*$//'))
    
por 27.02.2014 / 08:00

Tags