저는 GNU Awk 5.1.0, API: 3.0을 사용하고 있으며 다음 awk 스크립트가 있습니다. 테스트 결과 함수 매개변수를 사용하여 입력으로 사용되는 변수를 변경할 수 없다는 사실이 나타났습니다. 따라서 아래 예에서는 을 얻습니다 p: 21
. 이는 변수를 함수에 매개변수로 전달하는 한 함수가 종료된 후에 이를 다른 것으로 변경할 수 없음을 의미합니다. 맞습니까?
awk '
function solarex_nuclmn(e) {
e = 34
}
BEGIN {
p = 21
solarex_nuclmn(p)
print "p: " p
}
'
p: 34
을 사용하여 값을 얻을 수 있다는 것을 알고 있습니다 return e
.
awk '
function solarex_nuclmn(e) {
e = 34
return e
}
BEGIN {
p = 21
p = solarex_nuclmn()
print "p: " p
}
'
그런 다음 전역 변수를 사용할 수 있습니다. 대부분의 사람들은 전역 변수 사용을 피하고 싶어합니다.
awk '
function solarex_nuclmn(e) {
G = 34
}
BEGIN {
G = 21
solarex_nuclmn()
print "G: " G
}
'
마지막으로 배열을 사용할 수 있습니다
awk '
function solarex_nuclmn(a) {
a[0] = 34
}
BEGIN {
a[0] = 21
solarex_nuclmn(a)
print "a[0]: " a[0]
}
'
그게 다야. 다른 가능성은 없겠죠 p: 34
? return
, global
또는 을 사용합니다 array
. 여러 값을 변경하려면 가장 좋은 방법은 배열을 매개변수로 전달하는 것입니다(배열 요소 값을 변경할 수 있고 추가 배열 요소를 추가할 수 있으므로).
함수 범위 밖에서 함수가 값을 변경하도록 하는 이식 가능한 방법을 찾고 있습니다. 하지만 GAWK에 대한 구체적인 내용이 있다면 듣고 싶습니다.
답변1
당신이 무엇을 찾고 있는지 잘 모르겠지만, 다음은 매개변수와 반환 값의 일반적인 사용법을 보여주는 GNU awk의 3가지 함수 사용법입니다:
function f(a,b){ return a+b; }
function g(a,b){ A=a; B=b; }
function h(a,b){ SYMTAB[a] = SYMTAB[b]; }
BEGIN{
A=99; B=88; a=77; b=66;
x=f(1,2); print "x=" x
g(4,5); print "A=" A, "B=" B
h("A","B"); print "A=" A
}
f()
예를 들어 전역 변수 및 를 설정 x=f(1,2)
하는 데 사용할 수 있는 값을 반환합니다 . 인수 목록에 없기 때문입니다 . 깨달았다g()
A
B
a,b
h()
통화 이름, 여기서 전역 이름은 문자열로 전달되고 해당 이름의 전역 변수는 SYMTAB
GNU 내장 기호 테이블을 통해 액세스됩니다. 그러면 출력이 생성됩니다.
x=3
A=4 B=5
A=5