我正在尝试将数组传递给shell脚本,如this question中所述。我写了一个小脚本,它只是设计用于获取数组的名称并打印出数组:
#!/bin/bash
echo "$1"
echo "${!1}"
arrayVar=("${!1}")
echo "${arrayVar[1]}"
我声明一个数组变量与运行我的脚本一致,如下所示:
array=(foo bar test) ./test.sh array[@]
输出:
|array[@] # the bars are only here to force the final blank line
|(foo bar test)
|
似乎array
而不是实际上是一个数组,只是字符串(foo bar test)
即使我修改我的脚本直接通过名称而不是通过位置参数间接回显array
,我也会得到相同的结果。
#!/bin/bash
echo "$1"
arrayVar=("${!1}")
echo $arrayVar
echo "${arrayVar[1]}"
echo $array
echo "${array[1]}"
输出:
|array[@] # the bars are only here to force the final blank line
|(foo bar test)
|
|(foo bar test)
|
我只是做错了什么,或者在命令之前bash不支持数组赋值?
答案 0 :(得分:2)
似乎没有人支持它。
如果array=(foo bar test) ./test.sh
没有这样做(array
导出为文字字符串'(foo bar test)'
,那么
array=(foo bar test); export array; ./test.sh
应该,实际上,在导出之后,bash将数组报告为导出的数组(x
表示已导出):
$ declare -p array
declare -ax array='([0]="foo" [1]="bar" [2]="test")'
但事实证明这是谎言:
$ env | grep array; echo status=$?
status=1
答案 1 :(得分:2)
目前,bash不支持导出数组。这在man bash
:
可能尚未导出数组变量。