Se você chamar o comando help declare
. Você verá as seguintes informações:
-t NAME : to make NAMEs have the `trace' attribute
Existe algum exemplo que demonstre o uso desta opção. Eu pensei que isso desempenha o mesmo papel que o comando set -o functrace
, exceto que se aplica apenas aos argumentos em vez de todas as funções.
A motivação desta pergunta é que eu quero que uma função foo herde uma armadilha. Então tentei declare -t foo
mas não funcionou.
Eu certamente posso usar set -o functrace
para fazer com que todas as funções herdem uma armadilha, mas há circunstâncias em que eu quero que apenas uma ou duas funções herdem uma armadilha.
Aqui está o roteiro:
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
Aqui está a saída do script:
var is 0
var is 3
Eu esperava obter algo como:
var is 0
var is 1
var is 2
var is 3
declare -t foo
define o atributo trace na variávelfoo
(que de qualquer maneira não tem efeito especial). Você precisa usar-f
para configurá-lo na função:Com seu script modificado para usar
-f
, recebo a seguinte saída (explicação nos comentários):