9

执行

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

给我

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

是否可以在内部具有带点的系统属性?如果是这样怎么做?

4

4 回答 4

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 的影响,或者想要在属性名称或值中包含空格,则只需要引号。

于 2013-02-22T03:55:19.340 回答
4

今天下午的大部分时间我都在试图弄清楚如何访问 Jenkins 设置的某些属性(传递作业参数 jenkins 使用带点的属性格式)——这是来自 Adrian 的一个很好的提示,是的,它适用于读取脚本也是。我不知道该怎么做,但后来我尝试了:

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

这实际上工作得很好。但是,当然,这在以环境中已设置的属性启动的 shell 中工作,即在 Adrian 的示例中,这可以在从他提供的 perl 示例中调用的 bash 实例开始的脚本中工作。如果这个 perl 片段仅在他的 perl 示例之后直接放在同一个 shell 中,则不会。

至少我今天下午学到了一些东西,所以并不是所有的时间都是浪费。

于 2013-07-19T21:03:44.230 回答
2

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

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

于 2014-08-06T03:20:53.793 回答
1

Bash 只允许在变量名中使用 '_' 和字母数字字符。这 '。' 不允许。

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

于 2013-02-22T03:45:27.670 回答