BASH:连接字符串变量无法被select内部函数使用

时间:2016-11-10 06:40:57

标签: bash function select concatenation

在" hostmenu"下面的函数我希望连接字符串$ site和$ system用于标识将用于构建下一个菜单的数组。功能" sitemenu"和" sysmenu"设置设置$ sitesystem所需的两个必需变量。所有数组都在任何函数之外定义。我遇到的问题是" $ sitesystem"当select选择使用它时,它会变空。 " $ sitesystem的回显显示了位置参数" site"" system" (例如:" siteasysb")而不是数组中定义的字符串" $ siteasysb"。如何选择成功使用" $ sitesystem"变量?

#!/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 "$@"

1 个答案:

答案 0 :(得分:0)

要将变量的值用作另一个变量的名称,请将变量名称开头的!设置为indirect。所以:

由于您希望整个数组都包含[@],因此您需要将其包含在$sitesystem

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

请参阅How to iterate over an array using indirect reference?