function foo() {}
我进行搜索查询info bash
并查看POSIX的相关章节中的函数关键字,但没有找到.
什么是function
一些bash脚本中使用的关键字?这是一些不赞成的语法吗?
Eug*_*ash 72
function
在Bash中定义函数时,关键字是可选的,如手册中所述:
使用以下语法声明函数:
name () compound-command [ redirections ]
要么
function name [()] compound-command [ redirections ]
语法的第一种形式通常是首选,因为它与Bourne/Korn/POSIX脚本兼容,因此更具可移植性.
也就是说,有时您可能希望使用function
关键字来防止Bash 别名与您的函数名称冲突.考虑这个例子:
$ alias foo="echo hi"
$ foo() { :; }
bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
这里,'foo'
由同名别名的文本替换,因为它是命令的第一个单词.随着function
别名未展开:
$ function foo() { :; }
Run Code Online (Sandbox Code Playgroud)
New*_*onx 61
该function
关键字是在罕见的情况下,必要时在函数名也是一个别名.没有它,Bash在解析函数定义之前扩展别名 - 可能不是你想要的:
alias mycd=cd
mycd() { cd; ls; } # Alias expansion turns this into cd() { cd; ls; }
mycd # Fails. bash: mycd: command not found
cd # Uh oh, infinite recursion.
Run Code Online (Sandbox Code Playgroud)
使用function
关键字,事情按预期工作:
alias mycd=cd
function mycd() { cd; ls; } # Defines a function named mycd, as expected.
cd # OK, goes to $HOME.
mycd # OK, goes to $HOME.
\mycd # OK, goes to $HOME, lists directory contents.
Run Code Online (Sandbox Code Playgroud)