2016-04-07 2 views
1
#!/bin/bash 

function dialog_menu() 
{ 

    arr["$4"]="$(dialog --clear --backtitle "Archlinux Installer" --title "$1" --menu $2 10 60 5 $3 --output-fd 1)" 

} 

ARRAY[0]="\"sda\"" 
ARRAY[1]="\"The main disk\"" 

dialog_menu "Disk Selection" "Please, choose where to install Archlinux" "$(echo ${ARRAY[*]})" DISK_SELECTION 

echo "${arr[DISK_SELECTION]}" 

Задача здесь - получить диалог --menu для чтения моего массива. Но почему-то я не могу найти способ заставить его работать.Массив как параметр функции диалога в bash

EDIT 1:

Я попытался изменить массив array=('sda' 'super cool' 'sdb' 'less cool') и подмены вне функция работает с "${array[@]}". Но как только он находится в функции, он больше не работает.

+0

Я предлагаю вам сделать третий аргумент ('$ 3') на' dialog_menu' будет 'DISK_SELECTION', тогда все аргументы из' $ 4' будут представлять собой контент 'ARRAY'. Итак, 'dialog_menu" Выбор диска "" Пожалуйста ... "DISK_SELECTION" $ {ARRAY [@]} "'. Я также хотел бы предложить вам сократить имена переменных (т. Е. 'Array' вместо' ARRAY' или любое другое имя с нижней обложкой), так как переменные среды соглашения и внутренние переменные оболочки полностью капитализируются. Поскольку имена переменных чувствительны к регистру, это соглашение позволяет избежать случайного переопределения экологических и внутренних переменных. –

+0

[Аргументы] (http://mywiki.wooledge.org/Arguments) - отличный источник для дальнейшего изучения и изучения :-) –

ответ

0
#!/bin/bash 

array=(
    'sda' 
    'super cool' 
    'sdb' 
    'less cool' 
    'sdc' 
    'there is another ?' 
) 

function dialog_menu() 
{ 

    arr["$1"]="$(dialog --clear \ 
      --backtitle "$2" \ 
      --title "$3" \ 
      --menu "$4" 10 60 3 \ 
      "${!5}" --output-fd 1)" 

} 

dialog_menu disk_selection "Menu" "Menu Test" "This is a test for Menu entry" array[@] 

Хитрость в том, чтобы использовать ${!5} в качестве переменной функции dialog_menu, а затем вызвать массив обычно с array[@]

NB: модифицированный код немного, чтобы обеспечить лучшее чтение

Смежные вопросы