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
사이 에는 일대일 대응이 있습니다.a
ind
2
nvalue
"two"
특별한함수 호출.
이는 ind
and args에 nvalue
분명히 필요합니다 . 왜냐하면 2
and "two"
는 이름이 아니기 때문에 함수가 이를 참조할 수 없기 때문입니다.
마찬가지로 중요하지만 덜 명확합니다. 이름으로 특정 인수에 대해서만 작동하는 함수를 갖는 것은 매우 불편할 것입니다. arg에 이름을 지정한다는 것은 함수가 다른 배열에서 작동할 수 있음을 의미합니다 changeit (b, 7, "this")
.
awk에는 다소 특이한 기능이 있습니다. 함수는 호출자가 지정한 것보다 더 많은 매개변수를 정의할 수 있습니다. 함수 내의 이러한 값은 사용을 위한 지역 변수이며 0 또는 null로 초기화됩니다(awk는 값이 할당될 때만 변수의 유형을 결정하기 때문에 모호함). 이러한 arg는 이름이 함수 전용이고 함수가 차지하는 공간이 종료 시 해제되는 배열일 수도 있습니다.