awk 함수의 배열 매개변수

awk 함수의 배열 매개변수

awk에는 함수와 본문으로 구성된 다음 예제가 있습니다. 저는 배열이 실제로 함수 내에서 어떻게 작동하는지 이해하려고 노력하고 있습니다. array함수에 정의되어 changeit값으로 설정되어 있어도 스크립트 본문에서는 이름이 사용되기 때문입니다 a.

나는 배열이 전역적이며 본문과 함수 내에서 동일한 이름을 사용해야 한다는 인상을 받았습니다.

배열 자체는 함수를 통해 직접 조작할 수 있지만 몸체에 다른 이름이 부여되는 이유는 무엇 a입니까 array?

function changeit(array, ind, nvalue)
{
     array[ind] = nvalue
}

BEGIN {
    a[1] = 1; a[2] = 2; a[3] = 3
    changeit(a, 2, "two")
    printf "a[1] = %s, a[2] = %s, a[3] = %s\n",
            a[1], a[2], a[3]
}

답변1

awk 함수(및 대부분의 다른 언어)에 대한 인수는 위치에 따라 달라집니다. 따라서 , , , 및 array사이 에는 일대일 대응이 있습니다.aind2nvalue"two"특별한함수 호출.

이는 indand args에 nvalue분명히 필요합니다 . 왜냐하면 2and "two"는 이름이 아니기 때문에 함수가 이를 참조할 수 없기 때문입니다.

마찬가지로 중요하지만 덜 명확합니다. 이름으로 특정 인수에 대해서만 작동하는 함수를 갖는 것은 매우 불편할 것입니다. arg에 이름을 지정한다는 것은 함수가 다른 배열에서 작동할 수 있음을 의미합니다 changeit (b, 7, "this").

awk에는 다소 특이한 기능이 있습니다. 함수는 호출자가 지정한 것보다 더 많은 매개변수를 정의할 수 있습니다. 함수 내의 이러한 값은 사용을 위한 지역 변수이며 0 또는 null로 초기화됩니다(awk는 값이 할당될 때만 변수의 유형을 결정하기 때문에 모호함). 이러한 arg는 이름이 함수 전용이고 함수가 차지하는 공간이 종료 시 해제되는 배열일 수도 있습니다.

관련 정보