bash 内置命令“set”和“export”有什么作用?

bash 内置命令“set”和“export”有什么作用?

set我对 Bash 的目的和Bash的用途有点茫然export(我猜其他 shell 也可能如此)。

我认为它是用于设置环境变量,但这可以通过 来完成VARIABLE=VALUE,对吧?

另外打字setexport单独显示不同的值。

那么他们的目的是什么?

答案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 setinfo 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”的使用会令人困惑,
    因为该命令被“接受”(没有给出错误)

相关内容