我有一种情况需要将数组传递给shell脚本中的函数。但是我需要在创建时正确传递这个数组,我正在努力解决它的语法问题。
我需要像 -
这样的东西#! /bin/bash
array_test(){
local_array1=("${!1}")
echo "${local_array1[1]}"
}
array_test sample_array1=("abc" "def")
评论后编辑 -
我希望sample_array1
功能
abc
”的内容,即“def
”和“array_test()
”
答案 0 :(得分:1)
您不能使用除字符串之外的任何内容作为shell函数的参数。但是,如果您的shell支持pass a reference to a variable containing an array,那么可以 variable indirection。例如,在Bash中:
$ copy_func() {
name="${1}[@]"
copy=("${!name}")
echo "Array length: ${#copy[@]}"
echo "First element: ${copy[0]}"
echo "Second element: ${copy[1]}"
}
$ foo=('a a a' 'b b b')
$ copy_func 'foo'
Array length: 2
First element: a a a
Second element: b b b
但是,此时你已经超出了Bash的理智应用范围,应该认真考虑使用真正的语言。
你也可以传递整个变量声明和eval
它,但那是 too dangerous for production code :
$ eval_func() {
eval "$1"
echo "Array length: ${#foo[@]}"
echo "First element: ${foo[0]}"
echo "Second element: ${foo[1]}"
}
$ var='foo=("a a a" "b b b")'
$ eval_func "$var"
Array length: 2
First element: a a a
Second element: b b b
Bash范围非常宽松,因此您可以在外部范围内声明它,然后在函数中访问它。如果您不能使用其他语言,我强烈推荐这种方法:
$ access_func() {
echo "Array length: ${#foo[@]}"
echo "First element: ${foo[0]}"
echo "Second element: ${foo[1]}"
}
$ foo=('a a a' 'b b b')
$ access_func
Array length: 2
First element: a a a
Second element: b b b