Dialog menu with array

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

  1. The problem statement, all variables and given/known data:

Hi

I'm currently making a schoolproject and I'm stuck with reading an array into the possible options of a menu dialog. What I mean is: I've put some values into an array, I want all these values from the array to be possible to be selected in the menu. I'm npot sure how many options should be available, so i use the array length. Please help :slight_smile:
I'm programming in Debian and I use bash.

Thanks

variables:
array muzieklijst[]
mpg123 is for playing the song

  1. Relevant commands, code, scripts, algorithms:

dialog --menu "title" width height optionsammount\
option1 \
option 2 \
option 3 \
...

  1. The attempts at a solution (include all code and scripts):
dialog --menu "Choose song" 25 75 ${#muzieklijst[@]} \
        for j in $(`cat muzieklijst.txt`) ; do
            echo ""$j" \\"
        done 2> outputspeler.txt
        for (( i=0; i<${#muzieklijst[@]}; i=$i=1))
        do
            if [ "$muzieklijst" = `cat outputspeler.txt` ]
            then
                mpg123 muziekpadlijst[$i]
                continue
            fi
        done
  1. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

Odisee Technologiecampus Ghent, Ghent, Belgium, Joris Maervoet, B-ODISEE-JLW375-1718

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

---------- Post updated at 04:58 PM ---------- Previous update was at 04:41 PM ----------

I have to add, that I'm allowed to get help if I write where I got help from.

You seem to have a few problems.

You do not seem to fully understand how to use array variables. You cannot directly use a for loop to create a list of operands to a utility (and, with an array, there doesn't seem to be any need to try to use a for loop to create your dialog operand list).

Please try looking at the following code and guess at what the output will be. Then run the code and see if it does what you guessed it would do. For these examples, first create an array containing 4 items:

$ array=(item0 "item 1" "I am $USER" 'I am $USER')

Note that my login name is "dwc", so the expansion of $USER for you will probably be something different that what I show in my sample output below. Let us verify that array[] contain 4 elements with the expected values:

$ printf 'array contains %d elements\n' ${#array[@]}
array contains 4 elements
$ for i in ${!array[@]}
do      printf 'array[%d] is "%s"\n' $i "${array[$i]}"
done
array[0] is "item0"
array[1] is "item 1"
array[2] is "I am dwc"
array[3] is "I am $USER"
$ 

Is there anything above that surprised you?

Now let's try some of the array references used in your code. What would you expect the output to be from the following code:

$ i=2
$ printf '"%s"\n'  "$array" array[$i] "${array[$i]}" ${array[$i]} '${array[$i]}'

Note that the first two arguments to this printf statement are logically equivalent to two of the array references in the code you showed us. Did they produce the output you were expecting?

Now run that code. Did any of these arguments produce the output you were expecting?

After running all of the above code, would you expect the output from the following two commands to be the same or be different:

$ printf '%s\n' "${array[i]}"
$ printf '%s\n' "${array[$i]}"

Now run the code. Did you get the output you were expecting?

Does any of this help with your homework assignment?

Does knowing that the output produced by:

$ printf '%s\n' "${array[@]}"

is:

item0
item 1
I am dwc
I am $USER

help you?

1 Like