使用 AWK 撰寫 Recusive Program

AWK 中除了函數的參數列(Argument List)上的參數(Arguments)外,
所有變數不管於何處出現全被視為 Global variable. 其生命持續
至程式結束 — 該變數不論在function外或 function內皆可使用,
只要變數名稱相同所使用的就是同一個變數,直到程式結束.
因 Recusive 函數內部的變數, 會因它呼叫子函數(本身)而重覆使用,
故撰寫該類函數時, 應特別留心.

例如 : 執行

awk '

BEGIN
{

x = 35

y = 45

test_variable( x )
printf("Return to main : arg1= %d, x= %d, y= %d, z= %d\n",
arg1, x, y, z)
}

function test_variable( arg1 )
{
arg1++ # arg1 為參數列上的參數, 是local variable. 離開此函數後將消失.

y ++ # 會改變主式中的變數 y

z = 55 # z 為該函數中新使用的變數, 主程式中變數 z 仍可被使用.
printf("Inside the function: arg1=%d,x=%d, y=%d, z=%d\n",arg1, x, y, z)
} '

結果螢幕印出


Inside the function: arg1= 36,x= 35, y= 46, z= 55
Return to main : arg1= 0, x= 35, y= 46, z= 55

繼續閱讀 使用 AWK 撰寫 Recusive Program