如何将临时数组env变量args传递给bash函数?

时间:2019-07-22 21:24:30

标签: bash environment-variables

因此,我发现将命名参数传递给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

1 个答案:

答案 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")