bash:设置数组envvariables,并从任何shell脚本中取消引用失败

我以这种方式将数组设置为环境variables,例如。 脚本test.sh

在test.sh中

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

源码test.sh

现在在脚本test-1.sh

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

响应是没有什么,只是一个空行,而如果我尝试在test.sh中设置STRING="str1" ,并在test-1.sh执行echo $STRING ,这个工作。

testing只从root用户执行,现在如何将数组设置为envvariables,以便我可以根据需要调用数组的元素? 早些时候,我试图甚至修改/etc/bashrc ,也没有任何结果。

我需要将数组设置为envvariables,因为可能有许多脚本需要使用这些variables设置。

有人可以提供我的build议,纠正我在哪里做错了吗?

Solutions Collecting From Web of "bash:设置数组envvariables,并从任何shell脚本中取消引用失败"

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

数组变量可能尚未导出。

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

您可以通过参数或变量或环境相当容易地传递数组定义。 虽然这通常不是很有用。

 function f { unset -v "$2" typeset "$2" eval "${!1}" typeset -p "$2" } typeset -aa=(abc) myArr=$(typeset -pa) f myArr a 

误解是认为环境变量只能被shell使用 – 事实并非如此。 没有属性,包括只读,整数和数组,可以导出到环境块。 环境变量可以被任何语言,C,C ++,Perl,Java,Python,PHP等读取。 他们也存在于Windows上。

那么,另一种语言如何支持Bash特定的属性呢? 所有环境变量都被转换为字符串,除非Bash中的数组值完全不被导出。

Korn shell将只输出第一个元素。 ksh93还会执行一些exec来保留导出到Korn shell子项的可变属性。

顺便说一句,对变量名使用UPPERCASE被认为是不好的做法,因为它们可能与shell使用的相冲突。 此外,在Bash 3中,名称STRING在导出时有问题(在Bash 4中修复)。

你正试图把一个数组放到一个环境变量中,而环境变量只能是字符串。 bash没有正确的序列化/反序列化数组的方法; 手动这样做。

从进程传递给子进程的环境变量是非结构化字符串; 数组不能被支持。 你可以在Bash中演示这个:

 export x=foo printenv x 

那输出foo 。 如果我现在让x成为一个数组

 x=(foo bar) printenv x 

我们看不到输出( x未导出)。