因此,我发现将命名参数传递给bash函数的最便捷方法是通过“临时环境变量”,例如:kwd_arg=1 foo
。我想用它来传递数组变量,但是显然这两个功能并没有按预期的方式混合使用,我想知道如何正确地一起使用它们。
我尝试了相同的语法,但没有涉及函数,也没有“临时分配”:两者都有效。但是,当一起使用数组arg时,会将其视为纯字符串。
# bash func accepting an env kwd arg
foo() {
echo ${array_arg[0]}
echo ${array_arg[1]}
}
# doesn't work, array arg treated as string
array_arg=(1 2) foo
# output:
# (1 2)
#
# when set globally works surprisingly
array_arg=(1 2)
foo
# output:
# 1
# 2
# works of course
echo ${array_arg[0]}
echo ${array_arg[1]}
# output: same as above
答案 0 :(得分:0)
这似乎不是传递数组的好方法:
如果foo() { declare -p FOO; }
,那么
$ FOO=bar foo
declare -x FOO="bar" # OK
$ FOO=(a b c) foo
declare -x FOO="(a b c)" # not an array
但是
$ export FOO=(a b c)
$ foo
declare -ax FOO=([0]="a" [1]="b" [2]="c")