是否可以在bash中的命令之前执行数组赋值?

时间:2017-08-04 23:56:43

标签: arrays bash

我正在尝试将数组传递给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不支持数组赋值?

2 个答案:

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

中有记录
  

可能尚未导出数组变量。