-tオプションで宣言を使用する方法は?

-tオプションで宣言を使用する方法は?

コマンドを呼び出すと、help declare次のようになります。

-t NAME :  to make NAMEs have the `trace' attribute

このオプションの使用法を示す例はありますか?私はこれがset -o functraceすべての機能ではなくパラメータにのみ適用されることを除いて、コマンドと同じことを行うと思います。

この質問の動機は、foo関数がトラップを継承したいということです。だから試してみましたが、declare -t foo成功しませんでした。

もちろん、set -o functraceすべての関数にトラップを継承させることもできますが、場合によっては、1つまたは2つの関数だけがトラップを継承したいと思います。

スクリプトは次のとおりです。

function foo {
    var=1
    var=2
    var=3
}

declare -t foo

var=0

trap 'echo var is $var' DEBUG
    foo
trap - DEBUG    # turn off the DEBUG trap

以下はスクリプトの出力です。

var is 0
var is 3

私は次のようなものを得ることを期待しています:

var is 0
var is 1
var is 2
var is 3

答え1

declare -t fooトレース属性の設定変える foo(とにかく特殊効果はありません)。-f以下を使用して関数で設定する必要があります。

declare -ft foo

を使用するようにスクリプトを変更したら、-f次の出力を取得します(コメントの説明)。

var is 0 # foo called
var is 0 # before the first command in function is run
var is 0 # var=1
var is 1 # var=2
var is 2 # var=3
var is 3 # trap ...

関連情報