执行
user@EWD-MacBook-Pro:~$ export property.name=property.value
给我
-bash: export: `property.name=property.value': not a valid identifier
是否可以使用点内部的系统属性?如果是这样的话怎么办?
答案 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只允许变量名中的'_'和字母数字字符。 '。'是不允许的。