선언 명령에서 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
(트랩에 왜 함수 호출이 두 번 나타나는지 모르겠습니다.)