gawk 매뉴얼에서
일부 내장 함수(예
match
: ,split
, ,sub
)는 정규 표현식 상수를 인수로 허용하므로 정규 표현식 상수를 사용자 정의 함수에 대한 인수로 사용하려고 하면 혼란이 발생할 수 있습니다. 예를 들어:function mysub(pat, repl, str, global) { if (global) gsub(pat, repl, str) else sub(pat, repl, str) return str } { ... text = "hi! hi yourself!" mysub(/hi/, "howdy", text, 1) ... }
이 예에서 프로그래머는 정규식 상수를 사용자 정의 함수에 전달하고
mysub()
, 사용자 정의 함수는 이를 다시sub()
또는 에 전달하려고 합니다gsub()
. 그러나 실제로 일어나는 일은pat
일치 여부에 따라$0
매개변수에 1 또는 0의 값이 할당된다는 것 입니다/hi/
. gawk는 사용자 정의 함수에 대한 인수로 사용된 정규식 상수를 볼 때 경고를 표시합니다. 이러한 방식으로 실제 값을 전달하는 것은 예상되지 않을 수 있기 때문입니다.
함수가 실제 값 대신 정규식으로 인수를 받을 수 있도록 정규식 상수를 함수에 인수로 전달하려면 어떻게 해야 합니까?
즉, 정규식 상수를 함수에 전달하기 전에 정규식 상수가 문자열 일치 표현식으로 평가되는 것을 방지하고 그렇게 처리되도록 하려면 어떻게 해야 합니까?
- 정규식 상수를 문자열 일치 표현식으로 평가하지 않고 어떻게 내장 함수(예:
match
,split
, )에 정규식으로 전달할 수 있습니까?sub
감사해요.
답변1
함수 변수에 값을 전달하려면 따옴표를 사용해야 합니다.
mysub( "hi", "howdy", text, 1)
또는 변수에 다른 이름을 사용하십시오.
thisarg = "hi"
mysub( thisarg, "howdy", text, 1)