コマンドでtおよびfパラメータを宣言するBashシェルの例

コマンドでtおよびfパラメータを宣言するBashシェルの例

宣言コマンドで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回表示されるのかわかりません。)

おすすめ記事