当第一个参数是Bash中的数组时,访问第二个func参数

当第一个参数是Bash中的数组时,访问第二个func参数,bash,Bash,如果我有一个包含两个或多个参数的bash函数,并且第一个参数是数组,那么如何访问第二个参数 与此相同,但非数组参数是第一个参数,而我的参数不是(因此它不能回答我的问题) 不能将数组传递给bash中的函数。您只能传递字符串 使用“${array[@]}”传递的任何数组都将扩展为多个参数(类似于某些语言中的“splat”运算符)。这: 因此相当于: getParam "one" "two" "three" 3 解释为什么$2是2 相反,您可以: 像大多数其他工具一样 而不是第二个 ,并将名称作为

如果我有一个包含两个或多个参数的bash函数,并且第一个参数是数组,那么如何访问第二个参数

与此相同,但非数组参数是第一个参数,而我的参数不是(因此它不能回答我的问题)


不能将数组传递给bash中的函数。您只能传递字符串

使用
“${array[@]}”
传递的任何数组都将扩展为多个参数(类似于某些语言中的“splat”运算符)。这:

因此相当于:

getParam "one" "two" "three" 3
解释为什么
$2
2

相反,您可以:

  • 像大多数其他工具一样
  • 而不是第二个
  • ,并将名称作为单个字符串传递
您可以在这里使用两个棘手的参数展开:

getparams() {
    local ary=( "${@:1:$#-1}" )
    local last=${!#}
    declare -p ary last
}

getparams "a b" "c d" 10
ari
从索引1开始,从($#-1)=(3-1)=2个元素开始,获取位置参数的一部分。
last
是间接变量:
$#
这里是3,所以
${!#}
相当于
$3


Ref:

不将数组作为第一个参数传递。它将数组中的每个元素作为一个单独的参数传递——这是您所能做的,因为参数本质上是字符串……因此简单的答案是改变调用约定,将非数组参数放在第一位,就像在链接的答案中一样……而不太简单的答案是按名称而不是按值传递数组,我们的知识库中已经有很多重复项。但是我没有权限更改顺序。顺便说一句,请参阅re:
echo$I
echo$var
。可能是“获取最后一个参数”解决方案的一个附加元素。我认为获取最后一个参数将是一个方向。
getParam "one" "two" "three" 3
getparams() {
    local ary=( "${@:1:$#-1}" )
    local last=${!#}
    declare -p ary last
}

getparams "a b" "c d" 10
declare -a ary='([0]="a b" [1]="c d")'
declare -- last="10"