古いシェル スクリプトをデバッグしています。使用されているすべての変数の値を確認したいのですが、約 140 を超える変数が使用されている巨大な醜いスクリプトです。とにかく、スクリプトから変数名を抽出して、次のような便利なパターンに入れることができますか?
#!/bin/sh
if [ ${BLAH} ....
.....
rm -rf ${JUNK}.....
に
echo ${BLAH}
echo ${JUNK}
...
次のようにスクリプトを実行してみてください。
bash -x ./script.bash
または、スクリプトで設定を有効にします。
set -x
以下を使用して、関心のあるすべての変数を 1 つのコマンドでダンプできます。
set | grep -w -e BLAH -e JUNK
すべての変数を stdout にダンプするには、次を使用します。
set
また
env
スクリプト内から。
次を使用して、スクリプトで宣言された変数の (サブ) リストを抽出できますgrep
。
grep -Po "([a-z][a-zA-Z0-9_]+)(?==\")" ./script.bash | sort -u
指定された式は、文字列の後にイーガル記号 ( =
) と二重引用符 ( "
) が続くものと一致します。したがって、次のような構文を使用しないと機能しませmyvar="my-value"
ん。しかし、あなたはアイデアを得ました。
grep
オプション-P --perl-regexp
: PATTERN を Perl の正規表現 (PCRE、以下を参照) として解釈します (実験的)。-o --only-matching
: 一致する行の一致した (空でない) 部分のみを出力し、そのような部分はそれぞれ別の出力行に出力します。私は正の先読みを使用しています:(?==\")
イーガル記号の後に二重引用符が必要です。