User-Defined Functions 自定义函数
1.自定义函数可以在任何地方进行定义.函数名和左括号(中间不能有空格
function name(parameter-list ){
statements
}
两种返回方式:
- 隐式返回:当awk执行到函数的结尾时,它自动地返回到调用程序
- 显式返回:如果需要在结束之前退出函数,可以明确地使用返回语句提前退出。
return expression
函数可以直接使用awk中的变量,包括域变量($1、$2…)和函数外定义的其它变量,这些变量可以看做是全局变量,如果是直接使用,则函数中对变量的修改将影响该变量的值;
echo "123456" | awk ' {var = 10; MyFunc(); print $1; print var; } function MyFunc(){ print $1; var += 20; $1 = "abcdefg"; }'
123456
abcdefg
30如果想要使得函数对变量的修改不改变原变量的值,那么需要通过参数传递的方式来实现;
echo "123456" | awk ' { var = 10; MyFunc(var); print var; } function MyFunc(var){ var += 20; }'
10
函数中定义的变量默认也是全局的,如果想要使其作为局部变量,可以使用在参数中定义,但调用时不传入该参数的方式(shell函数中可以使用local关键字来定义局部变量);
echo "123456" | awk ' {MyFunc(); print var1; print var2; } function MyFunc(var1){ var1 = 0; var2 = 20; }'
(空)
20
函数的参数如果是标量则是传值,数组则是传引用,函数中改变数组的值可以改变全局数组中的值。
echo "123456" | awk ' {a = 10; b[1] = 15; MyFunc(a, b); print a; print b[1]; } function MyFunc(x, y){ x = 0; y[1] = 20; }'
10
20