Bash 似乎区分已导出的变量和未导出的变量。
例子:
$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR
Run Code Online (Sandbox Code Playgroud)
set看到变量但env没有。
$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR
Run Code Online (Sandbox Code Playgroud)
set看到两个变量,但env只看到导出的变量。
我知道这set是一个内置的 bash 而env不是。
导出的变量和不导出的变量之间有什么区别?
在我搜索列出所有 shell 变量的命令时,我以某种方式意识到,有一个命令可以列出所有环境变量,但不知何故,由于我不知道的原因,没有人列出所有 shell 变量。
但是,这里有人给出了如何显示所有变量、shell 和环境变量的答案。
( set -o posix ; set ) | less
Run Code Online (Sandbox Code Playgroud)
他其实并没有为外行解释这个表达是做什么的,我的零碎理解还不足以掌握它背后的想法。
这是我所知道的:
set是某种声明变量的方法,虽然不知道-o posix是什么意思以及为什么要连续执行第二个set
命令 | 少这个不是问题,即使我理解它,它是一个寻呼机,可以更好地控制输出。
当 set 命令不带任何选项使用时,它会显示所有 shell 变量和函数的名称和值。
我们只想显示变量并避免输出中的函数。
环境变量可以用env; 但是,有些没有显示。例如...
echo $EUID可能会产生结果,1000但
env | grep EUID不会产生结果。
这种类型的变量是什么?只读环境变量?
是否所有 shell 都按照某种约定设置了相同的变量?
如何列出这些隐藏变量?
如何在 Bash 中显示 shell 变量列表(不包括函数),因为许多函数与完成相关,因此经常使输出混乱?
我已经检查过declare,它有一个选项可以将输出限制为函数 ( declare -f),但不能将输出限制为“普通”shell 变量?
我只是在学习基础知识,包括如何声明和处理变量。有没有一种简单的方法来显示我命名的所有变量的列表?(我通过搜索找到的所有内容都只讨论环境变量,这可能是我正在寻找的,但可能不是?)