長いシェルスクリプトをリファクタリングしようとしていますが、関数内で宣言されているがグローバルに使用されている変数をすべて削除したいと思います。これらの変数をすばやく見つける方法はありますか?
または、使用時に空の変数をすばやく見つける方法はありますか?そうすれば、関数内のすべての変数をタイプセットして、グローバルに使用されるすべての変数のリストをすばやく確認できます(誤検知もありますが、それらを取り除くことができます)。
ありがとう。
あなたはset -u
役に立つかもしれません。使用時に変数が設定されていない場合、シェルはエラーになります。これは、使用時に空の文字列である変数を見つけるのに役立ちませんが、設定されていない変数を見つけることができます。
ここで実際のショートカットを認識していませんが、スクリプトをより体系的に探索するために実行できるいくつかの手順が確かにあります。
export -p
ます。declare
スクリプト内のキーワードのgrep 。declare -F
してgrepを実行し、declareステートメントまたは変数の割り当てを行います。set
知っている変数と関数を除外し、残りを調べます。これらのどれも包括的な解決策ではありません、私は恐れています。しかし、始めるには:
# Find declare statements in functions.
for func in $( declare -F | awk '{print $NF}' ); do
type "$func" | fgrep declare
done
お役に立てば幸いです。