如何导出点分隔的环境变量

时间:2013-02-22 03:38:07

标签: macos bash unix

执行

user@EWD-MacBook-Pro:~$ export property.name=property.value

给我

-bash: export: `property.name=property.value': not a valid identifier

是否可以使用点内部的系统属性?如果是这样的话怎么办?

4 个答案:

答案 0 :(得分:17)

正如其他人所说,bash不允许这样做,所以你必须使用自己喜欢的脚本语言来完成它。例如,在Perl中:

perl -e '$ENV{"property.name"} = "property.value"; system "bash"'

这将启动一个设置了property.name环境变量的子shell bash,但你仍然无法从bash访问该环境变量(尽管你的程序能够看到它)。

编辑:@MarkEdgar评论说env命令也可以运行:

 env 'property.name=property.value' bash # start a subshell, or
 env 'property.name=property.value' command arg1 arg2 ...   # Run your command

像往常一样,如果您需要保护shell中的特殊字符或者想要在属性名称或值中包含空格,则只需要引号。

答案 1 :(得分:4)

我今天下午花了更多时间试图找出如何访问Jenkins设置的一些属性(传递作业参数jenkins使用带点的属性格式) - 这是Adrian的一个很好的提示,是的,它适用于阅读脚本中的属性也是如此。我不知道该做什么,但后来我尝试了:

var=`perl -e 'print $ENV{"property.name"};print "\n";'`

实际上这很有效。但是当然这适用于以环境中设置的属性开始的shell,即在Adrian的示例中,这可以在从他提供的perl示例中调用的bash实例开始的脚本中工作。如果这个perl sniplet仅在他的perl示例之后直接放在同一个shell中,那就不行了。

至少我今天下午学到了一些东西,所以这一次都不是浪费。

答案 2 :(得分:2)

如果导出这些属性以运行应用程序,则某些程序可以支持将系统属性设置为选项,并在属性名称中允许.

在Java世界中,大多数工具都支持通过-D选项设置系统属性,例如您可以使用像-Dproperty.name=property.value这样的点设置系统属性。

答案 3 :(得分:1)

Bash只允许变量名中的'_'和字母数字字符。 '。'是不允许的。

http://tldp.org/LDP/abs/html/gotchas.html