问题描述
我要花几个小时才能弄清楚这一点。
我想做的是拥有一个可以接收 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 (将#修改为@)