只回显环境变量,但不回显 bash 函数

只回显环境变量,但不回显 bash 函数

有没有办法回显 bash 变量但不回显 bash 函数?

我可以做这个

env | grep -v 'BASH_FUNC'

但它们通常是多行的,因此函数中的其他行会得到回显。

答案1

要列出所有环境变量,但不列出导出的函数:

for n in `compgen -e`; do echo "$n=${!n}"; done

这里compgen -e列出了变量的名称;输出echo名称及其值。也许您想使用${!n@Q}而不是${!n}引用值,因此可以从文件中读回输出,或与eval.

(编辑:)
注意:当涉及数组时,这效果不太好;与忽略数组的不同,这会打印带有数组env索引的值。 0(对于关联数组,如果不0存在索引,name=则会打印。)
有关如何处理此问题的线索,请参阅以下问题的答案这个堆栈溢出问题

答案2

所以我使用子 shell 来执行此操作,并取消设置所有 bash 函数:

   (
       # in subshell

       for line in `declare -F | awk '{print $3}'`; do
          unset -f "$line"  # unset all bash funcs
       done

        env
    )

但我敢打赌有更好的方法

相关内容