Title here
Summary here
function name {
commands
}
或者
name() {
commands
}
返回值有多种形式。
表示函数最后一条命令的退出状态码。
echo $?
#!/usr/bin/env bash
function double {
echo "Double value"
read -p "Enter a value:" value
return $[ $value * 2 ]
}
double
echo "Result: $?"
本质是退出状态码,范围 [0, 255],超出会对 256 取模。
#!/usr/bin/env bash
function double {
read -p "Enter a value:" value
echo $[ $value * 2 ]
}
result=$(double)
echo "Result: $result"
result
会保存函数中所有的标准输出。
#!/usr/bin/env bash
function add {
if [ $# -lt 2 ]; then
echo "invalid params"
else
echo $[ $1 + $2 ]
fi
}
result=$(add 1 2)
echo "Result: $result"
函数里面的 $#
、$1
和外层的参数相互独立。
哪里都能访问。
#!/usr/bin/env bash
soda=green
function foo {
echo $soda
soda=yellow
}
foo
echo $soda
green
yellow
#!/usr/bin/env bash
function foo {
soda=green
}
# 函数没执行前无法访问
echo $soda
foo
echo $soda
soda=yellow
echo $soda
green
yellow
local
变量只在函数内部生效,和外部重名变量相互独立。
#!/usr/bin/env bash
soda=green
function foo {
echo $soda
local soda=yellow
echo $soda
}
foo
echo $soda
green
yellow
green
后面定义的同名函数会覆盖前面定义同名函数的,所以在定义函数之前,可以先判断一下。
declare -f FUNC_NAME
例如把函数写在 .bashrc 文件。
function sayhello() {
echo "hello"
}
declare -f sayhello
echo $?
函数已定义,退出码为 0,未定义,退出码为 1。
if declare -f sayhello > /dev/null; then
echo "sayhello is defined"
else
echo "sayhello not defined"
fi