如何导出 bash 数组?有什么解决方法吗?

如何导出 bash 数组?有什么解决方法吗?

我在 ubuntu 12.10 上使用 bash 版本 4.2.37。但从 ubuntu 12.04 开始,我无法在 bash 中导出数组...

这是一个示例(在命令行中输入这些行,它不是脚本):

export astr=(a "b c" d)
declare -p |grep astr
bash
echo ${astr[@]}
declare -p |grep astr

echo没有输出任何内容...

declare -p |grep astr也没有输出任何内容...

我正在寻找一种解决方法,因为据我所知,这被认为是一个已知的 bash 错误。

编辑:顺便说一句,如果可能的话,解决方法可以避免为数组创建临时存储文件,因为我可以在不同的 shell 上同时运行相同的脚本。

答案1

这不是 bash 的错误,只是没有安全的方法将 bash 数组放入环境中。

至于解决方法,这取决于您首先想要通过导出数组实现什么目的。

对于某些情况,一种可能的解决方法是将数组转储到文件中,然后在需要的地方获取该文件。

astr=(a "b c" d)
declare -p astr > some_file

bash -c 'source ./some_file; printf "%s\n" "${astr[1]}"'

另一个解决方法是将数组作为参数传递给下一个 shell。

astr=(a "b c" d)
bash -c 'astr=("$@"); printf "%s\n" "${astr[1]}"' _ "${astr[@]}"

答案2

等等等等......我知道我来晚了,但是当我们在谷歌上寻找导出数组时,这个问题仍然是相关的,所以我的解决方法是:

declare -a ASTR;
export ASTR=(`echo a b c`);

# Printing all elements content
echo "${ASTR[*]}";
# Printing a position 
echo "${ASTR[2]}";

一旦数组的第一个位置为 0,它将返回 c。我希望这可以帮助寻找它的人。

问候

相关内容