Last Updated: 2023-06-01 09:23:38 Thursday
-- TOC --
bash作为编程能力超强的工具,定义和使用function是肯定可以的啦...
function应该翻译成
功能块
,而函数这个翻译麻...
$ hello() {
> echo 'hello bash function'
> }
$ function hello2() {
> echo 'hello2...'
> }
$
$ hello
hello bash function
$ hello2
hello2...
unset -f <function_name>
declare -f
declare -F
declare -f <function_name>
$ declare -f hello
hello ()
{
echo 'hello bash function'
}
如果定义一个名称相同的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命令一样。
从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
定义仅用于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 --