정규식 상수를 함수의 매개변수로 전달하는 방법은 무엇입니까?

정규식 상수를 함수의 매개변수로 전달하는 방법은 무엇입니까?

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는 사용자 정의 함수에 대한 인수로 사용된 정규식 상수를 볼 때 경고를 표시합니다. 이러한 방식으로 실제 값을 전달하는 것은 예상되지 않을 수 있기 때문입니다.

  1. 함수가 실제 값 대신 정규식으로 인수를 받을 수 있도록 정규식 상수를 함수에 인수로 전달하려면 어떻게 해야 합니까?

    즉, 정규식 상수를 함수에 전달하기 전에 정규식 상수가 문자열 일치 표현식으로 평가되는 것을 방지하고 그렇게 처리되도록 하려면 어떻게 해야 합니까?

  2. 정규식 상수를 문자열 일치 표현식으로 평가하지 않고 어떻게 내장 함수(예: match, split, )에 정규식으로 전달할 수 있습니까?sub

감사해요.

답변1

함수 변수에 값을 전달하려면 따옴표를 사용해야 합니다.

mysub( "hi", "howdy", text, 1)

또는 변수에 다른 이름을 사용하십시오.

thisarg = "hi"
mysub( thisarg, "howdy", text, 1)

관련 정보