2016-11-10 67 views
0

在下面的「hostmenu」函數中,我希望使用連接字符串$ site和$ system來標識哪個數組將用於構建下一個菜單。 「sitemenu」和「sysmenu」函數設置了設置$ sitesystem所需的兩個必需變量。所有數組都是在任何函數之外定義的。我遇到的問題是,當選擇使用它時,「$ sitesystem」會變空。 「$ siteystem」的回顯顯示位置參數「site」「system」(例如:「siteasysb」),而不是數組「$ siteasysb」中定義的字符串。我怎樣才能讓select成功使用「$ sitesystem」變量?BASH:連接的字符串變量不能被select內部函數使用

#!/bin/bash 
main() 
{ 
    sitemenu 
    sysmenu 
    hostmenu 
} 
## functions omitted which set $site and $system ## 
hostmenu() 
{ 
    PS3="Please choose a $site $system device to connect to.." 
    clear 
    sitesystem=("$site""$system") 
    echo $sitesystem 
    select opt in "${sitesystem[@]}" 
    do 
    case $opt in 
## Omitted selected host section ## 
;; 
"Return to previous system menu") 
sysmenu 
;; 
"Return to site menu") 
sitemenu 
;; 
"Quit") 
break 
;; 
*) echo invalid option;; 
esac 
done 
} 
siteoptions=("sitea" "siteb" "Quit") 
sysoptions=("sysa" "sysb" "Return to site menu" "Quit") 
siteasysa=("a" "b" "Return to previous system menu" "Return to site menu" "Quit") 
siteasysb=("a" "b" "Return to previous system menu" "Return to site menu" "Quit") 

`main "[email protected]" 
+0

要使用變量作爲另一個變量的名稱,請使用'$ {!sitesystem}'。 – Barmar

回答

0

要使用一個變量的值作爲另一個變量的名稱,把!在變量名間接的開頭,這樣做:

既然你想[@]整個陣列,你需要包括在$sitesystem

sitesystem="$site$system[@]" 
select opt in "${!sitesystem}" 

請參閱How to iterate over an array using indirect reference?

+0

謝謝!它像一個魅力。我需要閱讀爲什麼它仍然工作的邏輯,但絕對是這樣做的。 – zeeohsix

相關問題