如果我具有带有两个或多个参数的bash函数,并且第一个是数组,那么如何访问第二个参数?
它与此question相同,但是非数组参数是此处的第一个参数,而我的不是(因此它无法回答我的问题)。
function getParam() {
arr=("$@")
for i in "${arr[@]}";
do
echo $i #works - print array item
done
var=$2
echo $var #not working - returns two; I want 3
}
array=('one' 'two' 'three')
getParam "${array[@]}" 3
答案 0 :(得分:4)
您不能将数组传递给bash中的函数。您只能传递字符串。
任何通过"${array[@]}"
传递的数组都将扩展为多个参数(类似于某些语言中的“ splat”运算符)。这个:
getParam "${array[@]}" 3
因此等同于此:
getParam "one" "two" "three" 3
解释为什么$2
是two
相反,您可以:
答案 1 :(得分:0)
您可以在此处执行的操作是使用一些棘手的参数扩展:
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"
ary
正在获取位置参数的一部分,从索引1开始,并获取($#-1)=(3-1)= 2个元素。
last
是变量间接寻址:$#
这里是3,所以${!#}
等效于$3
。