2017-02-07 7 views
-1

Что я хотел бы сделать, это хранить пункты меню в массиве и динамически извлекать их, чтобы получить как можно больше повторного использования. Как показано ниже, я получил синтаксическую ошибку на линии ***. Код получен из примеров пакетов Dialog.Вставка аргумента пакета диалогового окна Linux для цикла while/while?

function showSubMenu() { 
     . ./setup-vars 
     . ./setup-tempfile 

     $DIALOG --clear --title $1 $2 \ 
     --menu "" $3 \ 
*** (for line in $4 
     do 
      $line "" 
     done) 2> $tempfile 
     retval=$? 
     . ./report-tempfile 
} 

TITLE="MyStrings" 
TT= "[email protected]" 
MSG=("Linux" "Gentoo" "Arch" "Buildroot" "Ubuntu" "Debian" "RedHat") 
SIZE="20 30 6" 
for i in ${MSG[@]} 
do 
    echo $i 
done 
showSubMenu $TITLE $TT $SIZE ${MSG[@]} 

Мои вопросы: 1. Можно ли написать такой код? 2. Если нет, есть ли другая возможная или подобная идея для этого?

+0

Использование shellcheck.net для устранения проблем синтаксиса в сценарии, я мог видеть по крайней мере два здесь – Inian

+0

После добавления '\' '' между (для ....) ', исчезла ошибка синтаксиса. Первая строка, которая является 'Linux', считается аргументом. Как это исправить? –

+0

'TT =" $ @ "' -> это неправильно, удалите пробел, 'TT =" $ @ "' – Inian

ответ

0

Я понял.

function showSubMenu() { 
     . ./setup-vars 
     . ./setup-tempfile 

     $DIALOG --clear --title $1 $2 \ 
     --menu "" $3 \ 
    `(for line in $4 
     do 
      printf "${line}" 
     done)` 2> $tempfile 
     retval=$? 
     . ./report-tempfile 
} 

TITLE="MyStrings" 
TT= "[email protected]" 
MSG=("Linux" "Gentoo" "Arch" "Buildroot" "Ubuntu" "Debian" "RedHat") 
SIZE="20 30 6" 
for i in "${MSG[@]}" 
do 
    echo $i 
done 
showSubMenu $TITLE $TT $SIZE MSG[@] 

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

  • Нет связанных вопросов^_^