出口是干什么用的?
有什么区别:
export name=value
and
name=value
出口是干什么用的?
有什么区别:
export name=value
and
name=value
当前回答
Export将使该变量对当前shell派生的所有shell可用。
其他回答
Export将使该变量对当前shell派生的所有shell可用。
导出使子流程可以使用该变量。
也就是说,
export name=value
意味着该变量名可用于从该shell进程运行的任何进程。如果您希望进程使用此变量,请使用export,并从该shell运行该进程。
name=value
意味着变量范围被限制在shell中,并且对任何其他进程都不可用。你可以将它用于(比如说)循环变量、临时变量等。
需要注意的是,导出变量并不会使它对父进程可用。也就是说,在派生的进程中指定和导出一个变量并不会使它在启动它的进程中可用。
您可能已经知道,UNIX允许进程拥有一组环境变量,这些变量是键/值对,键和值都是字符串。 操作系统负责为每个进程分别保存这些对。
程序可以通过以下UNIX API访问它的环境变量:
Char *getenv(const Char *name); Int setenv(const char *名称,const char *值,Int重写); Int unsetenv(const char *name);
进程还从父进程继承环境变量。在创建子进程时,操作系统负责创建所有“envars”的副本。
Bash和其他shell一样,能够根据用户请求设置其环境变量。这就是出口存在的意义。
export是Bash设置环境变量的命令。用这个命令设置的所有变量都将被这个Bash创建的所有进程继承。
更多关于Bash中的环境
Bash中的另一种变量是内部变量。由于Bash不仅仅是交互式shell,它实际上是一个脚本解释器,就像任何其他解释器(例如Python)一样,它能够保留自己的一组变量。值得一提的是,Bash(与Python不同)只支持字符串变量。
定义Bash变量的符号是name=value。这些变量保存在Bash内部,与操作系统保存的环境变量无关。
更多关于Shell参数(包括变量)
另外值得注意的是,根据Bash参考手册:
任何简单命令或函数的环境都可以扩充 临时用参数赋值作为前缀,如前所述 在Shell Parameters中。这些赋值语句只影响 该命令所看到的环境。
总结一下:
Export命令用于设置操作系统中的环境变量。这个变量以后将对当前Bash进程创建的所有子进程可用。 Bash变量符号(name=value)用于设置局部变量仅对当前Bash进程可用 另一个命令前缀的Bash变量表示法仅为该命令的范围创建环境变量。
公认的答案暗示了这一点,但我想明确地说明与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
为了说明其他答案的意思:
$ foo="Hello, World"
$ echo $foo
Hello, World
$ bar="Goodbye"
$ export foo
$ bash
bash-3.2$ echo $foo
Hello, World
bash-3.2$ echo $bar
bash-3.2$