Linux bash-按设置的顺序打印环境变量

Linux bash-按设置的顺序打印环境变量,linux,bash,Linux,Bash,这个问题与bashshell有关 首先,我知道如何查看当前设置的环境变量 我想知道如何按设置顺序列出当前设置的环境变量。有点像“ls-lt”,但用于环境变量 这可能吗 编辑:许多人问我为什么需要这个 我做了大量的调试、代码移植、修复等工作。这需要我用编写得不好的第三方代码进行实验。在获得成功构建的过程中,我可能需要设置、覆盖一些环境变量。我非常擅长记录我正在做的事情,这样我可以追溯我的步骤。但有时我忘记或错过了记录我的步骤 出于非常好的理由,我们的环境拥有大量的环境变量 我可以在那一刻捕获整个环

这个问题与bashshell有关

首先,我知道如何查看当前设置的环境变量

我想知道如何按设置顺序列出当前设置的环境变量。有点像“ls-lt”,但用于环境变量

这可能吗

编辑:许多人问我为什么需要这个

我做了大量的调试、代码移植、修复等工作。这需要我用编写得不好的第三方代码进行实验。在获得成功构建的过程中,我可能需要设置、覆盖一些环境变量。我非常擅长记录我正在做的事情,这样我可以追溯我的步骤。但有时我忘记或错过了记录我的步骤

出于非常好的理由,我们的环境拥有大量的环境变量

我可以在那一刻捕获整个环境变量,但这对我没有多大帮助。如果bash能够按照设置的顺序列出env变量,那么我可以清楚地识别我设置了什么

此外,我同意bash没有理由跟踪这一点。但我希望它有一个内部env变量堆栈,它会自动按后进先出的方式排序。但我想这是过于乐观了


谢谢大家

正如@pmos在一篇评论中所建议的,您可能能够破解一些shell函数,这些函数将在您导出某些内容时手动跟踪,但shell本身无法做到这一点。原因如下。导出使环境可以使用名称。这仅对
exec*e
函数系列有意义。换句话说,
export
实际上只对遵循标准
fork/exec
模式的新流程有意义。但这也意味着保存导出名称的数据结构不是由shell决定的,而是由POSIX C决定的

参数envp是指向以null结尾的字符串的字符指针数组。这些字符串应构成新工艺图像的环境。envp数组由空指针终止

外部字符**环境初始化为指向环境字符串的字符指针数组的指针

假设进程按顺序向环境中添加字符串似乎是合理的,但事实上似乎并非如此,而且POSIX系统如此复杂,它们会进行大量设置、重置和取消设置也就不足为奇了

尽管你的问题集中在环境变量上,但你的措辞让我觉得你也有兴趣跟踪变量何时得到
set
,这与它们得到
export
ed时不同。这实际上完全是shell的问题,但唉,bash(至少)似乎也没有跟踪这一点


set
似乎按字母顺序显示名称。我甚至不知道外部
env
命令显示它们的顺序是什么。

我不这么认为。没有。您是否考虑了一组特定的环境变量,或者您希望对整个环境执行此操作?我想不出bash跟踪该信息的任何特定原因。您为什么要这样做?听起来像是X-Y问题。你需要这个做什么?如果只是供个人bash使用,您可以使用别名
export
来包含这样的功能:
函数trackenv_export(){export“$@”和&echo“$*”>“$HOME”/.env_track;};别名导出=trackenv_导出
。但这相当混乱,可能不是你想要的。
env(1)
。很可能是造成“混乱”的原因(尽管我没有看到在它的代码中搜索免费插槽)。