編集する

編集する

私はスクリプトを書いていますが、この場合、スクリプトで定義されているすべての変数名と値のダンプを見ることができれば本当に役立ちます。例は次のとおりです。

foo="1"
bar="2"

print_script_variables 

baz="3"

print_script_variables 

すると、以下が出力されます。

foo="1"
bar="2"

foo="1"
bar="2"
baz="3"

似たようなものがprint_script_variablesありますか?実行中のスクリプトを解析するのは愚かなことだと思います。

これが存在しない場合は、手動で複数のechoコマンドを入力した可能性があります。問題を解決するときに場所を移動したいとprint_script_variables思い、どの変数がスコープに入って来るのか心配する必要はないので、これは少し迷惑です。

これはbashスクリプトですが、端末でzshを使用するので、両方で動作するのが理想的です。

ベストアンサー1

muruの回答に加えて、スクリプトの先頭に環境変数名を保存し、print_script_variables関数が呼び出されたときに環境変数をフィルタリングできます。 POSIX 準拠のメソッドでは、set ユーティリティを使用してスクリプトの先頭にすべての変数をリストし、一時ファイルに保存します。 print_script_variables関数を呼び出すときは、diffを使用して不要な変数をフィルタリングします。

# invoke at script start
set > /tmp/file1 # assuming /tmp/file1 is a safely generated temporary file
trap 'rm -f /tmp/file1' INT TERM HUP EXIT # delete the file on SIG{INT,TERM,HUP} and EXIT
print_script_variables() {
    # suppress lines unique to file1 and lines present in pipe (set output)
    # that it outputs only lines added to file1, i.e. new variables
    set | comm -13 /tmp/file1 - # edited; thanks to Martin for helping to save an extra file;
}
variable=20
print_script_variables

編集する

最初の行を自動的に実行する方法が必要な場合は、次のものを使用できます。ポイント(またはソース)スクリプトの先頭でこの行を自動的に実行するユーティリティです。最初の行と関数定義をファイルに保存する必要がありますprint_script_variables。たとえば、次のようになります。

set > /tmp/file1
trap 'rm -f /tmp/file1' INT TERM HUP EXIT
print_script_variables() {
    set | comm -13 /tmp/file1 -
}

以下のように、スクリプトの先頭からそのファイルをインポートします。

. print_script_variables

variable=20
print_script_variables()

おすすめ記事