array – bash如何将数组作为参数传递给函数
发布时间:2020-12-15 09:09:28 所属栏目:安全 来源:网络整理
导读:我们知道,在bash编程中,传递参数的方法是$ 1,…,$ N。但是,我发现将一个数组作为参数传递给接收多个参数的函数并不容易。这里有一个例子: f(){ x=($1) y=$2 for i in "${x[@]}" do echo $i done ....}a=(“jfaldsj jflajds" "LAST")b=NOEFLDJFf "${a[@
我们知道,在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" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |