Answers:
似乎set和声明略有不同,set的功能更强大。
请参见https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins 声明下的“声明” :“声明变量并为其赋予属性。如果未指定名称,则显示变量的值代替。
在https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set 下设置“ set” 。更改外壳选项的值并设置位置参数,或显示外壳变量的名称和值。”
ENV是Bash中的环境变量:https : //www.gnu.org/software/bash/manual/bash.html#Bash-Variables env是Linux命令。我认为这是一个很好的参考:https : //unix.stackexchange.com/questions/103467/what-is-env-command-doing
我认为这是对导出的一个很好的解释:http : //www.unix.com/302531838-post2.html
另外:https : //www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export(来自Bourne):“标记每个要传递给环境中子进程的名称。”
从上面的URL借用代码:
root@linux ~# x=5 <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash <= subshell creation
root@linux ~# echo $x <= subshell doesnt know $x variable value
root@linux ~# exit <= exit from subshell
exit
root@linux ~# echo $x <= parent shell still knows $x variable
5
root@linux ~# export x=5 <= specify $x variable value using export command
root@linux ~# echo $x <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash <= create subshell again
root@linux ~# echo $x <= now the subshell knows $x variable value
5
root@linux ~#
declare
并set
和env
?出口与申报?
首先,您必须了解这一点,environment variables
并且shell variables
两者是不同的。
然后,您应该知道shell具有控制其工作方式的属性。这些属性既不是环境变量也不是shell变量。
现在,继续回答您的问题。
env
:不带任何选项,显示当前环境变量及其值;但是,可用于为带有-i
标志的单个命令设置环境变量set
:如果没有选项,则每个shell变量的名称和值都将以* man set
在rhel中运行;也可以用来设置shell属性。此命令DOES NOT设置环境也不shell变量。declare
:没有任何选择,与env
; 相同。也可以用来设置shell变量export
:使shell变量成为 环境变量简而言之:
set
没有设置外壳或环境变量env
可以为单个命令设置环境变量declare
设置外壳变量export
使shell变量成为环境变量NOTE
declare -x VAR=VAL
创建shell变量并导出它,使其成为环境变量。