企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[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 ```