来自man bash
(GNU bash,版本 5.2.21(1)-release(x86_64-pc-cygwin)):
set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
-a Each variable or function that is created or modified is given the export
attribute and marked for export to the environment of subsequent commands.
export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the environment of
subsequently executed commands.
这里我们看到,export
没有“给出导出属性”,而却set -a
给出了。为什么?这是一个疏忽吗?
附加问题:“导出”和“自动导出”有什么区别?(都应该是“导出”吗?都应该是“自动导出”吗?)
它是一个相同的导出属性,只是那里的帮助文本彼此不太一致。导出属性是shell 标记变量以进行(自动)导出的方式。
export
将属性赋予指定的变量,而set -a
将其赋予分配的任何和所有变量。我们可以使用 检查命名变量的值和属性
declare -p var
。这里我们看到export
和都set -a
给出了相同的 export(-x
) 标志:如果我不得不猜测为什么帮助文本在那里说“自动导出”,我会认为它指的是在命令开始时通过赋值“手动”导出变量的替代方法,例如这里,两个变量都不需要有导出标志: