在同一行中定义shell变量将传递给(java)进程,但不会传递到不同的行

时间:2017-06-22 13:44:21

标签: java bash shell environment-variables

因此,根据this,进程不会继承shell变量。

所以这个过程不应该看到变量A和B:

A=X
B=Y
java -cp blah ...

这一切都有意义,直到你看到如果在同一行上定义它们就被传递:

A=X \
B=Y \
java -cp blah ...

这是特定于Java(可能是内部读取命令行)还是所有* nix进程?

2 个答案:

答案 0 :(得分:4)

它不是特定于java而是posix shell语法规则。 当变量在同一行上时,它会在命令之前分配。而在不同的行上,子进程只有在导出export时才能看到它们。

http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_10_02

  
      
  1. [指定名称前的作业]

         

    [当第一个字]

         

    如果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.
    
  2.         

    NAME的分配应按照简单命令中的规定进行。

答案 1 :(得分:1)

将内容转换为单个行会将其转换为单个进程调用。换句话说:你基本上是在说:评估这个表达作为一个整体;表达式从这两个定义开始。