我在 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
Run Code Online (Sandbox Code Playgroud)
echo 什么都不输出...
declare -p |grep astr 也不输出什么...
我正在寻找的是一种解决方法,因为据我所知,这被认为是一个已知的 bash 错误。
编辑:顺便说一句,如果可能,解决方法可以避免为阵列创建临时存储文件,因为我可能会在不同的外壳上同时运行相同的脚本。
这不是 bash 的错误,只是没有任何安全的方法可以将 bash 数组放入环境中。
至于解决方法,这取决于您首先尝试通过导出数组来实现什么。
在某些情况下,一种可能的解决方法是将数组转储到一个文件中,并在需要的地方提供该文件。
astr=(a "b c" d)
declare -p astr > some_file
bash -c 'source ./some_file; printf "%s\n" "${astr[1]}"'
Run Code Online (Sandbox Code Playgroud)
另一种解决方法可能是将数组作为参数传递给下一个 shell。
astr=(a "b c" d)
bash -c 'astr=("$@"); printf "%s\n" "${astr[1]}"' _ "${astr[@]}"
Run Code Online (Sandbox Code Playgroud)