ファイルでいくつかの変数宣言構文に対して 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) 文字および/または角括弧 ( \[\])および/または単一 ( '\'')および/または二重 ( ") 引用符の後に=.
- 2 番目の 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