我们知道,在bash编程中,传递参数的方法是$ 1,…,$ N。但是,我发现将一个数组作为参数传递给接收多个参数的函数并不容易。这里有一个例子:
f(){ x=($1) y=$2 for i in "${x[@]}" do echo $i done .... } a=(“jfaldsj jflajds" "LAST") b=NOEFLDJF f "${a[@]}" $b f "${a[*]}" $b
如上所述,函数freceives两个参数:第一个分配给x是数组,第二个分配给y。
f可以以两种方式调用。第一种方法使用“$ {a [@]}”作为第一个参数,结果是:
jfaldsj jflajds
第二种方法使用“$ {a [*]}”作为第一个参数,结果是:
jfaldsj jflajds LAST
两个结果都是我所希望的。所以,有没有人有任何想法如何正确地传递函数之间的数组。
您不能传递数组,您只能传递其元素(即展开的数组)。
原文链接:https://www.f2er.com/bash/389275.html#! /bin/bash function f() { a=("$@") ((last_idx=${#a[@]} - 1)) b=${a[last_idx]} unset a[last_idx] for i in "${a[@]}" ; do echo "$i" done echo "b: $b" } x=("one two" "LAST") b='even more' f "${x[@]}" "$b" echo =============== f "${x[*]}" "$b"
另一种可能性是通过名称传递数组:
#! /bin/bash function f() { name=$1[@] b=$2 a=("${!name}") for i in "${a[@]}" ; do echo "$i" done echo "b: $b" } x=("one two" "LAST") b='even more' f x "$b"