因此,根据this,进程不会继承shell变量。
所以这个过程不应该看到变量A和B:
A=X
B=Y
java -cp blah ...
这一切都有意义,直到你看到如果在同一行上定义它们就被传递:
A=X \
B=Y \
java -cp blah ...
这是特定于Java(可能是内部读取命令行)还是所有* nix进程?
答案 0 :(得分:4)
它不是特定于java而是posix shell语法规则。
当变量在同一行上时,它会在命令之前分配。而在不同的行上,子进程只有在导出export
时才能看到它们。
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_10_02
- 醇>
[指定名称前的作业]
[当第一个字]
如果TOKEN不包含字符' =',则应用规则1。否则,应使用7b。
[不是第一个字]
如果TOKEN包含等号字符:
If it begins with '=', the token WORD shall be returned. If all the characters preceding '=' form a valid name (see the Base Definitions volume of IEEE Std 1003.1-2001, Section 3.230, Name),
将返回令牌ASSIGNMENT_WORD。 (引用的字符不能 参与组建有效名称。)
Otherwise, it is unspecified whether it is ASSIGNMENT_WORD or WORD that is returned.
NAME的分配应按照简单命令中的规定进行。
答案 1 :(得分:1)
将内容转换为单个行会将其转换为单个进程调用。换句话说:你基本上是在说:评估这个表达作为一个整体;表达式从这两个定义开始。