在Linux Shell中设置变量时,set,env,declaration和export之间有什么区别?


Answers:


5

似乎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 ~#

declaresetenv?出口与申报?
Pacerier '17

我不得不对此表示否决,因为它只是没有回答问题。
Daniel C. Sobral

让我知道这是否更好。
肖恩·

1

首先,您必须了解这一点,environment variables并且shell variables两者是不同的。

然后,您应该知道shell具有控制其工作方式的属性。这些属性既不是环境变量也不是shell变量。

现在,继续回答您的问题。

  1. env:不带任何选项,显示当前环境变量及其值;但是,可用于为带有-i标志的单个命令设置环境变量
  2. set:如果没有选项,则每个shell变量的名称和值都将以* man set在rhel中运行;也可以用来设置shell属性。此命令DOES NOT设置环境也不shell变量
  3. declare:没有任何选择,与env; 相同。也可以用来设置shell变量
  4. export:使shell变量成为 环境变量

简而言之:

  1. set 没有设置外壳或环境变量
  2. env 可以为单个命令设置环境变量
  3. declare 设置外壳变量
  4. export 使shell变量成为环境变量

NOTE declare -x VAR=VAL创建shell变量并导出它,使其成为环境变量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.