宣言コマンドでtパラメータとfパラメータを使用する理由と方法を正確に理解していません。簡単な絵を見せていただけますか?
ベストアンサー1
このtrace
属性は、関連する関数の継承とDEBUG
トラップRETURN
を有効にします。-f
ただ引数が変数declare
ではなく関数であることを意味します。
Bashのマニュアルにはこんな感じです。機能情報:
シェル実行環境の他のすべての側面は、次の例外を除いて、関数とその呼び出し元の間で同じです。関数にトレース属性が指定されていない場合、DEBUG および RETURN トラップは継承されません。
しかも説明declare
:
-t
各名前のトレース属性を指定します。トレース関数は呼び出しシェルから DEBUG および RETURN トラップを継承します。 Trace プロパティは変数に対して特別な意味を持ちません。
これが関数で何が起こるのかいいえプロパティtrace
:
$ f() { echo a; echo b; }
$ trap 'echo DEBUG: $BASH_COMMAND' DEBUG
$ f
DEBUG: f
a
b
機能に属性が割り当てられると、次のことが発生しますtrace
。
$ declare -f -t f
DEBUG: declare -f -t f
$ f
DEBUG: f
DEBUG: f
DEBUG: echo a
a
DEBUG: echo b
b
(トラップになぜ関数呼び出しが2回表示されるのかわかりません。)