您可以对文件中的某些变量声明语法执行 egrep,然后通过剪切它来获取变量名称,例如:
egrep '[a-zA-Z0-9"'\''\[\]]*=' /path/to/file |egrep -v '^#' |cut -d'=' -f1 |awk '{print $1}'
如果您有一个包含这样内容的文件
#!/bin/bash
A="test"
somerandomfunction () {
echo "test function"
B="test"
}
#C="test"
DEF="test"
GHI1="test"
JKL[1]="test"
JKL['a']="test"
JKL["b"]="test"
上述命令的输出如下所示:
A
B
DEF
GHI1
JKL[1]
JKL['a']
JKL["b"]
命令解释:
- 第一个 egrep 搜索包含任意数量和组合的小写 (
a-z
)和/或大写 ( A-Z
) 字母和/或方括号 ( \[\]
)和/或单引号 ( '\''
)和/或双"
引号 ( ) 后跟 a 的行=
。
- 第二个 egrep 排除以 a 开头的行,
#
因为这些行通常被解释为注释并且不会生成或设置变量。
- cut 命令会删除从
=
到行尾的所有内容。
- awk 命令打印除空格或制表符之外的第一次出现的内容,因此有效地切掉变量名前面的空白空间。
该命令的输出可以在循环或类似的东西中使用:
for VAR in $(egrep '[a-zA-Z0-9"'\''\[\]]*=' /path/to/file |egrep -v '^#' |cut -d'=' -f1 |awk '{print $1}'); do
eval echo "\$${VAR}"
done