set
我对 Bash 的目的和Bash的用途有点茫然export
(我猜其他 shell 也可能如此)。
我认为它是用于设置环境变量,但这可以通过 来完成VARIABLE=VALUE
,对吧?
另外打字set
和export
单独显示不同的值。
那么他们的目的是什么?
答案1
export
将给定变量标记为导出到当前进程的子进程,默认情况下不导出它们。例如:
$ foo=bar
$ echo "$foo"
bar
$ bash -c 'echo "$foo"'
$ export foo
$ bash -c 'echo "$foo"'
bar
set
另一方面,设置 shell 属性和位置参数。
$ set foo=baz
$ echo "$1"
foo=baz
请注意,baz
未分配给foo
,它只是成为文字位置参数。还有许多其他事情set
可以做(主要是 shell 选项),请参阅help set
。
至于打印,export
不带参数调用会打印 shell 环境中的所有变量。set
还打印变量不是出口。它还可以导出一些其他对象(尽管您应该注意这是不可移植的),请参阅help export
。
答案2
请参阅help set
或info bash set
:set 用于设置 shell 属性和位置参数。
未导出的变量不会被子进程继承。export
用于标记要导出的变量。
答案3
您可以将“导出”命令视为将变量变为全局...
为了更好地理解,我将在前面的答案中附加以下示例:
x=1
bash -c 'echo $x'
# nothing show
export x
bash -c 'echo $x'
# value of x shown
- 对于 Windows 用户来说,“set”的使用会令人困惑,
因为该命令被“接受”(没有给出错误)