在 Linux shell 中设置变量时 set、env、declare 和 export 有什么区别?

use*_*279 31 linux bash shell shell-script

在 Linux shell 中设置变量时setenvdeclare和之间有什么区别export,例如bash

Tra*_*iet 14

首先,你必须明白这environment variablesshell variables不是一回事。

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

现在,开始回答你的问题。

  1. env: 不带任何选项,显示当前环境变量及其值;但是可用于为带有-i标志的单个命令设置环境变量
  2. set: 不加选项,显示每个shell变量的名称和值*~来自man setrhel中运行;也可用于设置shell 属性。此命令设置环境或 shell 变量
  3. declare: 不带任何选项,同env; 也可以用来设置shell变量
  4. export: 使shell 变量成为 环境变量

简而言之:

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

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

  • 因此,根据 /sf/ask/404996791/,“declare -x”与“export”几乎相同 (3认同)
  • 那么 `declare -g` 这将创建一个全局变量,它也会成为环境的一部分吗? (2认同)
  • 它不会成为环境的一部分。它将成为具有全局作用域的 shell 变量。要查看“全局作用域”效果,您可以尝试创建一个执行“declare -ga=3”的函数。一旦你运行它,由于变量是全局范围的,即使你退出了函数,变量仍然存在(例如你可以用 echo $a 引用它) (2认同)
  • *`set` 不设置 shell 或环境变量* ---- 确实是误导性的设计...... (2认同)

Sha*_* P. 8

似乎 set 和 declare 略有不同, 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:“这个内置函数太复杂了,值得拥有它自己的部分。set 允许你更改 shell 选项的值并设置位置参数,或显示 shell 变量的名称和值。”

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 ~#
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

16596 次

最近记录:

6 年,7 月 前