コマンド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
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 ...