我在 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。我希望这可以帮助寻找它的人。
问候