一尘不染

bash:设置数组env变量并从任何shell脚本中取消引用它都会失败

linux

我以这种方式将数组设置为环境变量。脚本test.sh

在test.sh中

#!/bin/bash
export STRING=( "str1" "str2" )

源test.sh

现在在脚本中 test-1.sh

#!/bin/bash
echo ${STRING[0]}

响应什么都没有,只是一个空白行,但是,如果我尝试STRING="str1"在test.sh中进行设置并echo $STRING在中进行test-1.sh,则可以正常工作。

测试仅从root用户执行,现在如何将array设置为env变量,以便我可以根据需要调用array的元素?早些时候,我什至尝试进行修改/etc/bashrc,但这也没有带来任何积极的结果。

我需要将数组设置为env变量,因为可能必须编写许多脚本才能使用这些变量设置。

有人可以向我提供建议以纠正我做错的地方吗?


阅读 295

收藏
2020-06-02

共1个答案

一尘不染

阅读精美的手册“错误”部分。

数组变量可能尚未导出。

虽然,我不知道很多人认为这是一个实际的错误。其他支持ksh样式的shell也不允许导出它们。

您可以很容易地通过参数,变量或环境来传递数组定义。通常它不是很有用。

function f {
    unset -v "$2"
    typeset "$2"
    eval "${!1}"
    typeset -p "$2"
}

typeset -a a=(a b c)
myArr=$(typeset -p a) f myArr a
2020-06-02