这种写法可以实现执行执行脚本中的函数
bash demo.sh demo 1 2 '3 4'
./demo.sh demo 1 2 '3 4'
也支持
source demo.sh
demo 7 8 '9 10'
# 严谨的执行方式
set -o nounset -o xtrace -o errexit -o pipefail
# 函数定义
demo() {
# 获取当前的执行函数
# 尽量使用局部变量
local function_name=${FUNCNAME[0]}
echo function_name=$function_name
echo params_count=$#
echo params="$@"
echo
echo $function_name "$@"
}
if [[ ${BASH_SOURCE[0]} == $0 ]]; then
# bash demo.sh demo 1 2 '3 4'
function=$1
shift
$function "$@"
else
# source执行方式
:
fi