函数
最后更新于:2022-04-02 03:53:50
[TOC]
## 概述
函数总是在当前 Shell 执行,Bash 会新建一个子 Shell 执行脚本。如果函数与脚本同名,函数会优先执行。但是,函数的优先级不如别名
### 参数变量
函数体内可以使用参数变量,获取函数参数。函数的参数变量,与脚本参数变量是一致的。
$1~$9:函数的第一个到第9个的参数。
$0:函数所在的脚本名。
$#:函数的参数总数。
$@:函数的全部参数,参数之间使用空格分隔。
$*:函数的全部参数,参数之间使用变量$IFS值的第一个字符分隔,默认为空格,但是可以自定义。
语法
```
# 第一种
fn() {
# codes
}
# 第二种
function fn() {
# codes
}
```
示例
```
hello() {
echo "Hello $1"
}
hello word
// hello word
```
### 全局变量和局部变量,local 命令
函数内部可以赋值全局变量
### local命令声明局部变量
```
#! /bin/bash
# 脚本 test.sh
fn () {
local foo
foo=1
}
fn
echo "global: foo = $foo"
// global: foo =
```
```
# 脚本 test.sh
fn () {
foo=1
}
fn
echo "global: foo = $foo"
// global: foo = 1
```
## 示例
### 日志函数
```
#! /bin/bash
log_msg() {
echo "[`date '+ %F %T'` ]: $@"
}
log_msg "info this is a info"
// [ 2020-07-02 21:48:14 ]: info this is a info
```
';