编写 Shell Function

Last Updated: 2023-06-01 09:23:38 Thursday

-- TOC --

bash作为编程能力超强的工具,定义和使用function是肯定可以的啦...

function应该翻译成功能块,而函数这个翻译麻...

定义Shell Function

$ hello() {
>     echo 'hello bash function'
> }
$ function hello2() {
>     echo 'hello2...'
> }
$ 
$ hello
hello bash function
$ hello2
hello2...
$ declare -f hello
hello () 
{ 
    echo 'hello bash function'
}

如果定义一个名称相同的function,就是将原来的覆盖!

给Shell Function传参

shell function在定义的时候,不需要像其它编程语言一样申明参数列表。shell function的参数,就是bash的位置参数,从$0开始,$1$2$3......shell function在提取$0的时候,值为bash,因此shell function真正的参数,从$1开始:

$ test() {
> echo $0 $1 $2
> }
$ test a b
bash a b

调用shell function,没有(),参数就更在后面,用空格分开,就像是输入其它shell命令一样。

return

从function返回,用return命令,return命令后面只能带数字,0-255,如果return一个负数,会自动转换成unsigned char

单独的return,后面不带数字,默认就是return 0

同时获取function的return code和字符串输出

$ tfunc() {
>   echo '123456'
>   return 78
> }
$ 
$ A=$(tfunc)
$ echo $?
78
$ echo $A
123456

另一个用return语句的场景,是使用sourced script file!其它时候,用exit命令。

如果在function中使用exit,整个脚本的执行就结束了。

local

local定义仅用于function的局部变量,那些没有local申明的变量,都是全局的!

$ HI='hi...'
$ tfunc() {
>   local HI='hello...'
>   echo $HI
> }
$ tfunc
hello...
$ echo $HI
hi...

在shell function中申明的变量,如果没有local前缀,自动就是全局的!

bash脚本与其它编程语言的代码有一些明显的不同之处!比如这个local,就是与其他编程语言反着的;比如给shell function传递参数,但是其定义时却没有参数列表;获取shell function的输出,要通过执行子进程的方式......

本文链接:https://cs.pynote.net/sf/linux/shell/202202091/

-- EOF --

-- MORE --