日期:2011 年 10 月 12 日
使用 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