执行
user@EWD-MacBook-Pro:~$ export property.name=property.value
给我
-bash: export: `property.name=property.value': not a valid identifier
是否可以在内部具有带点的系统属性?如果是这样怎么做?
正如其他人所说,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 的影响,或者想要在属性名称或值中包含空格,则只需要引号。
今天下午的大部分时间我都在试图弄清楚如何访问 Jenkins 设置的某些属性(传递作业参数 jenkins 使用带点的属性格式)——这是来自 Adrian 的一个很好的提示,是的,它适用于读取脚本也是。我不知道该怎么做,但后来我尝试了:
var=`perl -e 'print $ENV{"property.name"};print "\n";'`
这实际上工作得很好。但是,当然,这在以环境中已设置的属性启动的 shell 中工作,即在 Adrian 的示例中,这可以在从他提供的 perl 示例中调用的 bash 实例开始的脚本中工作。如果这个 perl 片段仅在他的 perl 示例之后直接放在同一个 shell 中,则不会。
至少我今天下午学到了一些东西,所以并不是所有的时间都是浪费。
如果您导出这些属性以运行应用程序,则某些程序可以支持将系统属性设置为选项,并允许 .
在属性名称中。
在 Java 世界中,大多数工具都支持通过-D
选项设置系统属性,例如,您可以像这样用点设置系统属性-Dproperty.name=property.value
。
Bash 只允许在变量名中使用 '_' 和字母数字字符。这 '。' 不允许。