awk에서 함수 정의는 언제 실행되나요?

awk에서 함수 정의는 언제 실행되나요?

awk에서 함수 정의는 언제 실행되나요?

함수 정의는 실행 전에 실행됩니까 BEGIN {...}? 감사해요.

답변1

이것은 결정하기 쉬웠습니다. 저는 awk 스크립트 파일의 끝에 함수를 정의하여 "최악의 경우"를 먼저 테스트하기로 결정했습니다.

$ cat go.awk
BEGIN {
  print "The BEGIN block is executing"
  print reverse("The BEGIN block is executing")
}

{
  print reverse($0)
}

function reverse(str) {
  trs=""
  for(i=length(str); i > 0; i--) {
    trs=trs substr(str, i, 1);
  }
  return trs
}

그리고:

$ cat input
line one
line two
line three

...결과는 다음과 같습니다.

$ awk -f go.awk < input
The BEGIN block is executing
gnitucexe si kcolb NIGEB ehT
eno enil
owt enil
eerht enil

BEGIN 블록이 사용자 정의 reverse함수를 성공적으로 호출했기 때문에 BEGIN 블록이 입력되기 전에("정의된" 함수가 "실행"됨) 함수가 정의되었음을 알 수 있습니다.

이 기능을 보셨나요?처형된정의되면 print함수 내부에 명령문을 삽입하고 함수가 정의될 ​​때까지 명령문에 출력이 없는지 관찰하십시오.라고.

이것awk에 대한 POSIX 사양가장 관련성이 높은 사항은 다음과 같습니다.

함수는 awk 프로그램의 어느 곳에서나 참조될 수 있으며, 특히 함수 정의보다 먼저 사용될 수 있습니다. 함수의 범위는 전역입니다.

이것멍청한 맨 페이지다음과 같은 것을 암시합니다.

... Gawk는 모든 프로그램 파일과 명령줄 소스 텍스트가 함께 연결된 것처럼 프로그램 텍스트를 읽습니다. 이는 이를 사용하는 모든 새 AWK 프로그램에 함수를 포함하지 않고도 AWK 함수 라이브러리를 구축하는 데 유용합니다. 또한 라이브러리 기능을 명령줄 프로그램과 혼합하는 기능도 제공합니다.

...

Gawk는 다음 순서로 AWK 프로그램을 실행합니다. 먼저 -v 옵션으로 지정된 모든 변수 할당이 수행됩니다. 다음으로 gawk는 프로그램을 내부 형식으로 컴파일합니다. 그런 다음 gawk는 BEGIN 규칙(있는 경우)의 코드를 실행하고 계속합니다...

관련 정보