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