2016-11-10 39 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

相关问题