Bash 函数定义、参数与返回状态

Shell 函数把一组命令封装成可重复调用的名称。函数应在首次调用前完成定义。

定义与调用

#!/usr/bin/env bash
 
hello_world() {
  printf '%s\n' 'Hello, World!'
}
 
hello_world

也可以使用 function name { ...; } 形式,但 name() { ...; } 更接近 POSIX Shell 语法。

传递参数

函数内部通过位置参数读取调用时传入的值:

#!/usr/bin/env bash
 
show_values() {
  printf '第一个参数:%s\n' "$1"
  printf '第二个参数:%s\n' "$2"
  printf '第十个参数:%s\n' "${10}"
}
 
show_values '111' '222'

常用特殊参数:

  • $#:参数数量。
  • "$@":逐个保留全部参数。
  • $?:上一条命令或函数的退出状态。

返回状态与输出值

return N 设置的是函数退出状态,范围通常为 02550 表示成功,非零值表示失败:

is_readable_file() {
  [[ -f $1 && -r $1 ]]
}
 
if is_readable_file 'example.txt'; then
  printf '%s\n' '文件存在且可读'
fi

需要返回文本时,让函数写到标准输出,再使用命令替换接收:

greeting() {
  printf 'Hello, %s!\n' "$1"
}
 
message=$(greeting 'Alice')
printf '%s\n' "$message"

函数调用其他函数

function_two() {
  printf '%s\n' 'function two'
}
 
function_one() {
  printf '%s\n' 'function one'
  function_two
}
 
function_one

参考资料