jll*_*gre 15
正如我在评论中已经说过的,env不符合要求,因为它只显示导出的变量。
处理set输出以过滤掉任何看起来不像变量定义的东西是一种不可靠的技巧。您尤其会错过值包含换行符的一部分变量。更糟糕的是,精心编写的函数可能会出现虚假的变量定义。
最简单的解决方案是暂时切换到 POSIX 模式,其中函数不被视为(某种)变量:
set -o posix
set
set +o posix
Run Code Online (Sandbox Code Playgroud)
但是,如果您的默认模式已经是 POSIX,或者您希望该命令在 shell 设置为的任何 POSIX 模式下工作,则会出现问题。
在这种情况下,这里有一个解决方法:
(set -o posix;set)
Run Code Online (Sandbox Code Playgroud)
这只会为set在子 shell 中执行的内置命令设置 POSIX 模式,而父 shell 模式不受影响。