有没有办法回显 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
)
但我敢打赌有更好的方法