function funName[()] compound-command [ redirections]

为了更简洁地说明,我以一个例子来说明我想分享的内容:

  • #!/usr/bin/env bash :这一行是指明用bash脚本解释器解释脚本
#!/usr/bin/env bash

# function关键字是可选的。如果省略,方法名后一定要加上小括号。
mylog() {
printf "$1 : $2"
}

# 调用方法就像调用shell的普通命令一样。
mylog "TAG" "this is a demo!\n"

#小括号是可以省略
function myCommand {
myvar= echo 'See you again world 9999'| tr 9 8
printf -v myvar
}

myCommand

#这是一个完整的例子
function command1(){
printf "Hello $1\n"
}

command1 $1

运行结果:

shelltest % bash hello.sh Tom
TAG : this is a demo!
See you again world 8888
printf: usage: printf [-v var] format [arguments]
Hello Tom

shell函数就是给一组命令一个名字,以备稍后调用执行。shell函数的function关键字是可选的,省略时,方法名的小括号不能省略,如果带上关键字,那么小括号是可省略的。shell的函数调用方法与调用shell命令一样,包括传参也是。
注意: 诸如$1这里获取参数的异同。虽然都是同一个,但是要搞清它们的具体传值。如:

mylog() {
printf "$1 : $2"
}

# 调用方法就像调用shell的普通命令一样。
mylog "TAG" "this is a demo!\n"

function command1(){
printf "Hello $1\n"
}

command1 $1

调用如下:

shelltest % bash hello.sh Tom

那么mylog方法中的$1 和 $2分别是"TAG" ,“this is a demo!\n”。但是下面这行代码:

command1 $1

它的$1指的是Tom这个值。所以要注意并理解好“shell的函数调用方法与调用shell命令一样,包括传参也是”这一句话。