如何打印bash脚本中的所有变量?

问题描述 投票:0回答:2

假设我有这样的东西:

#!/bin/bash
var1=1
var2='two'
third='cat'
abcd='dog'
.
.
.
.
something='else'
env

现在我想打印脚本中声明的所有变量。
我尝试过

env
,但是是的...它打印的环境变量不是我本地的..
另外
cat /proc/$$/environ
也没有给我我想要的东西,因为它等于
env

使用更多调试信息运行我的脚本
bash -x ./myscript.sh
不适合我。
有什么技巧可以列出所有变量及其值吗?

bash
2个回答
0
投票

根据您的用例,您可能不需要保存“之前”

set
输出,然后将其与“之后”输出进行比较。

如果所有变量都有一些基本模式,则

set | grep
可能就足够了。

内置变量名称全部大写。我总是以小写开头我的脚本变量名。就这么简单

set | grep '^[a-z].*='

列出脚本中迄今为止定义的所有变量。

这也会解析函数,但由于

set
会缩进打印它们,因此这些行不会以小写字母开头,并且会被忽略。

如果您不希望函数也经过

grep
,请像所有其他答案一样使用 Posix 选项:

( set -o posix; set | grep '^[a-z].*=' )

0
投票

这对我有用,但我没有对其进行足够的测试,无法说它 100% 有效

declare -p | gawk 'BEGIN{f=0} $0 ~ /^declare -- _=/{f=1; next} f==1{print $0} '

它将打印

_
之后的所有变量,您也可以使用
set
,就像@mivk之前的答案一样。

© www.soinside.com 2019 - 2024. All rights reserved.