假设我有这样的东西:
#!/bin/bash
var1=1
var2='two'
third='cat'
abcd='dog'
.
.
.
.
something='else'
env
现在我想打印脚本中声明的所有变量。
我尝试过
env
,但是是的...它打印的环境变量不是我本地的..cat /proc/$$/environ
也没有给我我想要的东西,因为它等于 env
。bash -x ./myscript.sh
不适合我。根据您的用例,您可能不需要保存“之前”
set
输出,然后将其与“之后”输出进行比较。
如果所有变量都有一些基本模式,则
set | grep
可能就足够了。
内置变量名称全部大写。我总是以小写开头我的脚本变量名。就这么简单
set | grep '^[a-z].*='
列出脚本中迄今为止定义的所有变量。
这也会解析函数,但由于
set
会缩进打印它们,因此这些行不会以小写字母开头,并且会被忽略。
如果您不希望函数也经过
grep
,请像所有其他答案一样使用 Posix 选项:
( set -o posix; set | grep '^[a-z].*=' )
这对我有用,但我没有对其进行足够的测试,无法说它 100% 有效
declare -p | gawk 'BEGIN{f=0} $0 ~ /^declare -- _=/{f=1; next} f==1{print $0} '
它将打印
_
之后的所有变量,您也可以使用set
,就像@mivk之前的答案一样。