0

長いシェルスクリプトをリファクタリングしようとしていますが、関数内で宣言されているがグローバルに使用されている変数をすべて削除したいと思います。これらの変数をすばやく見つける方法はありますか?

または、使用時に空の変数をすばやく見つける方法はありますか?そうすれば、関数内のすべての変数をタイプセットして、グローバルに使用されるすべての変数のリストをすばやく確認できます(誤検知もありますが、それらを取り除くことができます)。

ありがとう。

4

2 に答える 2

2

あなたはset -u役に立つかもしれません。使用時に変数が設定されていない場合、シェルはエラーになります。これは、使用時に空の文字列である変数を見つけるのに役立ちませんが、設定されていない変数を見つけることができます。

于 2012-06-07T14:05:58.157 に答える
1

ここで実際のショートカットを認識していませんが、スクリプトをより体系的に探索するために実行できるいくつかの手順が確かにあります。

  1. でエクスポートされた変数を検索しexport -pます。
  2. declareスクリプト内のキーワードのgrep 。
  3. ループスルーdeclare -Fしてgrepを実行し、declareステートメントまたは変数の割り当てを行います。
  4. の出力を解析して、set知っている変数と関数を除外し、残りを調べます。

これらのどれも包括的な解決策ではありません、私は恐れています。しかし、始めるには:

# Find declare statements in functions.
for func in $( declare -F | awk '{print $NF}' ); do
    type "$func" | fgrep declare
done

お役に立てば幸いです。

于 2012-06-07T13:23:55.617 に答える