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