2017-02-07 9 views
-1

私がしたいのは、できるだけ多くの再利用性を得るために、メニュー項目を配列に格納して動的に取得することです。次のコードを示すと、***行に構文エラーがあります。コードはDialogのパッケージ例から派生しています。Linuxダイアログパッケージ引数for/for 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、私は\ '' '(...用)' 'の間で追加した後、ここで少なくとも2 – 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[@]