Answers:
您只需要export
在外壳程序中启动的其他程序应“看到”的变量,而只需要在外壳程序本身中使用的变量则无需export
编辑。
这是手册页所说的:
The supplied names are marked for automatic export to the environ‐
ment of subsequently executed commands. If the -f option is given,
the names refer to functions. If no names are given, or if the -p
option is supplied, a list of all names that are exported in this
shell is printed. The -n option causes the export property to be
removed from each name. If a variable name is followed by =word,
the value of the variable is set to word. export returns an exit
status of 0 unless an invalid option is encountered, one of the
names is not a valid shell variable name, or -f is supplied with a
name that is not a function.
这可以通过以下示例进行演示:
$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh
$ export MYVAR="value-exported"
$ ./echo.sh
value-exported
说明:
${MYVAR}
为Shell变量MYVAR="value"
。使用echo
I可以回显它的值,因为echo是外壳的一部分。echo.sh
。那是一个基本执行相同操作的小脚本,它只是echo ${MYVAR}
,但不同之处在于它将在不同的进程中运行,因为它是一个单独的脚本。echo.sh
它时不会输出任何内容,因为新进程不会继承${MYVAR}
${MYVAR}
使用export
关键字导出到我的环境中echo.sh
再次运行相同命令时,它会回显内容,${MYVAR}
因为它是从环境中获取的因此,回答您的问题:
它取决于要在何处使用变量,是否必须导出它。
使用export
的环境变量。环境变量是操作系统功能。环境变量是由子进程继承的:如果将它们设置在Shell中,则它们在此Shell启动的所有程序中都可用。许多应用程序或外壳程序以外的特定应用程序使用的变量是环境变量。以下是一些常见环境变量的示例:
HOME
—表示用户的主目录,这是每个用户的配置文件所在的位置。由读取每个用户的配置文件的任何程序使用,否则需要了解用户主目录的位置。PATH
—指示在哪里找到可执行文件以启动其他程序。由需要启动另一个程序的每个程序使用。LD_LIBRARY_PATH
—指示在哪里可以找到动态库文件。由每个动态链接的可执行文件使用。EDITOR
,VISUAL
—表示需要编辑器时要运行的程序。由需要启动文本编辑器的任何程序使用。DISPLAY
,XAUTHORITY
—表示如何连接到X11服务器。由X11客户端(即GUI程序)使用。LESS
— less
运行时自动打开选项。由使用less
。http_proxy
—表示要使用的Web代理。大多数网络浏览器使用。不要export
用于shell变量。Shell变量是Shell作为一种编程语言的功能。Shell变量仅在设置它们的Shell内部使用;它们对shell启动的程序没有意义。创建子外壳程序时,外壳程序变量会重复,就像其余的外壳程序状态一样。以下是一些shell变量示例,这些变量对流行的shell有意义:
PS1
—在每个命令之前显示的提示。IFS
—在未加引号的变量扩展和命令替换中分隔单词的字符。HISTFILE
— Shell将在其中写入命令历史记录的文件。除了外壳程序使用的变量外,大多数外壳程序脚本还将变量用于内部目的。
大多数环境变量(例如PATH
)对于整个会话来说都是有意义的,应在~/.profile
或类似文件中设置。仅在特定于外壳程序(例如PS1
)的变量才应在特定于外壳程序的文件(例如~/.bashrc
或)中设置~/.zshrc
。请参阅是否所有外壳程序都读取“ .bashrc”等效文件?