1

Как видно из названия. Попытка заполнить массив из вывода контрольного списка zenity. Вот функция, которую я хочу запустить, но она не работает:

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
}

Последующий вывод терминала:

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

Так что по неизвестным (для меня) причинам выход zenity назначается первому элементу в массиве. Но если я изменю присвоение массива, используя переменную «$ cntr», тогда элементы массива будут заполнены, как и ожидалось.

# 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

Последующий вывод терминала:

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

Я хочу потерять переменную '$ cntr' и echo, когда все будет работать как положено. Я уверен, что проблема в чем-то очевидном, чего мне не хватает; но собака ушла, если я не вижу, что смотрю на это. Любая помощь приветствуется.

1 ответ1

0

array+=string добавляет "строку" к первому элементу массива; чтобы добавить его в качестве нового элемента, используйте вместо него array+=(string) . В вашей функции это означает использование:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .