web-dev-qa-db-ja.com

ホイップテールメニューへの配列-BASH

ユーザーフレンドリーなwhiptailメニューを表示したいと思います。

whiptailでの私の目標はこれです:

Choice1
Choice2
Choice3
Choice4

私は配列を持っています:

Choice1 Choice2 Choice3 Choice4

私はこのようにループを介して配列を実行します:

for value in ${value[@]}
do
    echo "$value"
done

他に4つのメニューがあるため、echo内にwhiptailを追加できませんでした。

私は次のようなスクリプトを試しました:

$val=$(whiptail --title "xx" --menu "choose" 16 78 10
for value in ${value[@]}
do
    echo "$value"
done
3>&1 1>&2 2>&3)

上記のスクリプトを実行した後、私のシェルはひどいように見えます。

スクリプト後のシェル:

enter image description here

私の問題を解決する人はいますか?

2
Michal N.

スクリプトにいくつかのエラーがあります。ループイテレータに配列自体と同じ名前を付けないでください。ただし、このタスクにループは必要ありません。特別な配列インデックス@を使用してすべての配列要素を一度に配置するだけです。

value=(Choice1 "" Choice2 "" Choice3 "" Choice4 "")
whiptail --title "xx" --menu "choose" 16 78 10 "${value[@]}"

引用符""内の空の文字列に注意してください-これはwhiptailメニューオプションに必要な説明です。それがないと、ChoiceChoice4を説明として扱います。

Choice1 Choice2
Choice3 Choice4

おそらくあなたが望むものではないもの。

2
jimmij