当我在/bin/sh更改一个env var时,它只会在新的export命令后生效,例如:
$ which ant /usr/sfw/bin/ant $ env | grep ANT ANT_HOME=/usr/local/apache-ant-1.9.8 $ PATH=$ANT_HOME/bin:$PATH $ which ant /usr/sfw/bin/ant $ env | egrep '^PATH=' PATH=/usr/local/gcc-492/bin:/export/home/sisis/mpi-V50:... $ export PATH $ which ant /usr/local/apache-ant-1.9.8/bin/ant $ env | egrep '^PATH=' PATH=/usr/local/apache-ant-1.9.8/bin:/usr/local/gcc-492/bin:/export/home/sisis/mpi-V50 ...
这是一个错误还是一个新function?
马蒂亚斯
特征。 未导出的variables对于分叉程序是不可见的。 导出它们使其可见。 PATH从父进程inheritance,并将按原样传递给subprocess,如env ; 只有在export标记后,shell进程中的任何更改才能对subprocess可见。 这也可以在传家宝bourneshell中观察到:
$ PATH=/usr/bin:/bin $ echo $PATH /usr/bin:/bin $ env | grep \^PATH PATH=/Users/jdoe/bin:/Users/jdoe/usr/darwin15.0-x86_64/bin:/Users/jdoe/perl5/bin:... $ export PATH $ env | grep \^PATH PATH=/usr/bin:/bin $ PATH=/usr/local/bin:/usr/bin:/bin $ echo $PATH /usr/local/bin:/usr/bin:/bin $ env | grep \^PATH PATH=/usr/local/bin:/usr/bin:/bin $
现代(或甚至其他)炮弹不同; ZSH默认导出PATH :
$ PS1='%% ' zsh -f % echo ${(t)PATH} scalar-export-special %
然而,这种不同的行为对SunOS sh或传家宝bourne sh没有影响。