出口是干什么用的?

有什么区别:

export name=value

and

name=value

当前回答

Export将使该变量对当前shell派生的所有shell可用。

其他回答

公认的答案暗示了这一点,但我想明确地说明与shell内置的连接:

如前所述,export将使一个变量对shell和子程序都可用。如果不使用export,该变量将只在shell中可用,并且只有shell内置程序可以访问它。

也就是说,

tango=3
env | grep tango # prints nothing, since env is a child process
set | grep tango # prints tango=3 - "type set" shows `set` is a shell builtin

只是为了显示环境中导出的变量(env)和环境中未导出的变量之间的区别:

如果我这样做:

$ MYNAME=Fred
$ export OURNAME=Jim

那么只有$OURNAME出现在环境中。变量$MYNAME不在环境中。

$ env | grep NAME
OURNAME=Jim

但是变量$MYNAME在shell中确实存在

$ echo $MYNAME
Fred

export NAME=对子进程有意义的设置和变量的值。

NAME=当前shell进程私有的临时变量或循环变量的值。

更详细地说,export标记了环境中的变量名,该变量名在创建时复制到子流程及其子流程。从不从子进程复制任何名称或值。

A common error is to place a space around the equal sign: $ export FOO = "bar" bash: export: `=': not a valid identifier Only the exported variable (B) is seen by the subprocess: $ A="Alice"; export B="Bob"; echo "echo A is \$A. B is \$B" | bash A is . B is Bob Changes in the subprocess do not change the main shell: $ export B="Bob"; echo 'B="Banana"' | bash; echo $B Bob Variables marked for export have values copied when the subprocess is created: $ export B="Bob"; echo '(sleep 30; echo "Subprocess 1 has B=$B")' | bash & [1] 3306 $ B="Banana"; echo '(sleep 30; echo "Subprocess 2 has B=$B")' | bash Subprocess 1 has B=Bob Subprocess 2 has B=Banana [1]+ Done echo '(sleep 30; echo "Subprocess 1 has B=$B")' | bash Only exported variables become part of the environment (man environ): $ ALICE="Alice"; export BOB="Bob"; env | grep "ALICE\|BOB" BOB=Bob

所以,现在它应该像夏天的太阳一样清晰了!感谢Brain Agnew, alexp和William Prusell。

默认情况下,在脚本中创建的变量只对当前shell可用;子进程(子shell)将不能访问已设置或修改的值。允许子进程查看这些值,需要使用export命令。

Export将使该变量对当前shell派生的所有shell可用。