我们知道,在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
两个结果都是我所希望的。所以,有没有人有任何想法如何正确地传递函数之间的数组。
您不能传递数组,您只能传递其元素(即展开的数组)。
#! /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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。