如何在不定义顺序且数组元素可以包含多个单词的Bash中将包括数组在内的多个参数传递给函数?

问题描述

我要花几个小时才能弄清楚这一点。

我想做的是拥有一个可以接收 N 个参数的函数,该参数可以包含数组。

数组可以位于任何参数位置,而不仅仅是最后一个!

参数的顺序可以更改,例如,我可以一次将第一个参数作为数组传递,而在另一个调用中作为第二个参数传递!

数组和普通参数必须可以互换!

示例代码(此示例参数顺序中的注释是固定的,有关问题,请参见以下示例):

# $1 Menu title
# $2 List of menu options
# $3 Menu text
menu() {
        dialog --clear --stdout --title "$1" --menu "$3" 0 0 0 "$2"
}

options=(
        1 "Option 1"
        2 "Option 2"
        3 "Option 3"
        4 "Option 4")
menu "Title" ${options[@]} "Text"

第一个例子可以这样解决:

# $1 Menu title
# $2 List of menu options
# $3 Menu text
menu() {
        local -n a=$2
        dialog --clear --stdout --title "$1" --menu "$3" 0 0 0 "${a[@]}"
}

options=(
        1 "Option 1"
        2 "Option 2"
        3 "Option 3"
        4 "Option 4")
menu "Title" options "Text"

问题示例:

my_func() {
        my_command "$1" --something "$2" "$3" --somethingelse "$4"
}

optionsa=(
        1 "Option 1"
        2 "Option 2"
        3 "Option 3"
        4 "Option 4")

optionsb=(
        1 "Option 1"
        2 "Option 2"
        3 "Option 3"
        4 "Option 4")

my_func "Title" ${optionsa[@]} "Text" ${optionsb[@]}
# Note that I could do this and it must work too:
my_func ${optionsa[@]} "Title" ${optionsb[@]} "Text"
# This too must work:
my_func ${optionsa[@]} ${optionsb[@]} "Title" "Text"

扩展数组时,必须可以将值用作命令的参数,如果数组中的值带有多个引号(“选项1”),则必须将其视为单个参数,以避免例如传递路径为"/my dir/",并以</my> <dir/>分隔。

如何解决第二个示例,其中的顺序或参数可能会有所不同?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)