如何打印所有非环境变量?
这些是自shell启动以来我添加的所有变量,例如在执行操作时:
read abc
123
# echo ${abc} => 123
或者
xyz='123'
# echo ${xyz} => 123
我想打印所有这些文件,以了解添加到内存中的内容,以便清除它。
如果您使用的是Bash,则此命令将列出未由子进程继承且不属于默认面板的所有shell变量的名称:
diff -U 1 <(set -o posix ; set |cut -d= -f1) <(exec bash -ic 'set -o posix ; set' | cut -d= -f1)|grep '^[-][^-]'|cut -d- -f2|grep -vE '^(COLUMNS|HISTFILESIZE|HISTSIZE|LINES|PIPESTATUS)$'
这将生成当前外壳程序set
中所有变量名的列表(带有),以及在运行相同外壳程序的新创建子进程中的所有变量名的列表,将找到第一个列表中的所有变量名,而不是第二个列表中的所有变量名(带有diff
,最后一次剪切,以及第一个grep),并剪裁了子流程不会拥有的某些Bash特定的默认变量,因为它不是面向用户的外壳程序。set -o posix
使set
仅列出变量而不列出函数。
它会忽略这两个继承的环境变量和变量您明确标记为导出。
换掉bash
外壳。您最后还需要更改被忽略变量的列表grep
,并且可能会丢失set -o posix
。如果您的Shell没有进程替代,则需要使用临时文件代替,或使用平台特定的对文件描述符的访问(例如/dev/fd
)。
另一方面,如果您只想清除自己的局部变量和函数,则
exec bash
将具有这种效果(同时还会重新读取一些配置文件,并可能丢失对Shell选项的本地更改)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句