sha*_*ant 17 shell environment-variables subshell set
在我搜索列出所有 shell 变量的命令时,我以某种方式意识到,有一个命令可以列出所有环境变量,但不知何故,由于我不知道的原因,没有人列出所有 shell 变量。
但是,这里有人给出了如何显示所有变量、shell 和环境变量的答案。
( set -o posix ; set ) | less
Run Code Online (Sandbox Code Playgroud)
他其实并没有为外行解释这个表达是做什么的,我的零碎理解还不足以掌握它背后的想法。
这是我所知道的:
set是某种声明变量的方法,虽然不知道-o posix是什么意思以及为什么要连续执行第二个set
命令 | 少这个不是问题,即使我理解它,它是一个寻呼机,可以更好地控制输出。
ilk*_*chu 14
set
显示所有 shell 变量(导出或不导出)。在 Bash 中,set -o posix
将 shell 设置为POSIX 兼容模式。(我不知道其他 shell 是否对类似的功能有类似的语法,但我会在这里假设 Bash。)
这种情况下的区别在于,通常 Bash 的set
也显示 shell 函数,但在 POSIX 模式下set
只显示变量,并且稍微改变了输出格式:
- 当 set builtin 在没有选项的情况下被调用时,它不会显示 shell 函数名称和定义。
- 当 set builtin 在没有选项的情况下被调用时,它显示不带引号的变量值,除非它们包含 shell 元字符,即使结果包含非打印字符。
在 Bash 中,还有一个declare
内置函数可用于declare -p xx
显示变量的所有其他隐藏或 Bash 特定标志:xx
以 Bash 可以作为输入的格式显示变量。declare -p
显示所有变量,declare -f
可用于显示函数。
基本上有两件事:set
在子shell中调用命令以避免弄乱您当前的shell选项,并且在列出所有变量之前将该子shell设置为POSIX模式。引用手册:
posix 更改 bash 的行为,其中默认操作不同于 POSIX 标准以匹配标准(posix 模式)。有关详细介绍 posix 模式如何影响 bash 行为的文档,请参阅下面的另请参见。
简而言之,bash
在 POSIX 模式下会表现得更接近什么sh
。
至于 option-less set
,它也在手册中,它实际上说明了为什么需要 POSIX 模式的原因:
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...] 如果没有选项,每个 shell 变量的名称和值以一种格式显示,该格式可以重复用作设置或重置当前设置的变量的输入。. . 在posix模式下,只列出shell变量。
...与变量和函数定义相反,这bash
是在常规模式下所做的。
请参阅此有关POSIX模式的详细信息。
归档时间: |
|
查看次数: |
4115 次 |
最近记录: |