[英]What is the 'function' keyword used in some bash scripts?
function foo() {}
我在info bash
進行搜索查詢,並在POSIX的已重寫章節中查找功能關鍵字,但未找到任何內容。
在某些bash腳本中使用的function
關鍵字是什么? 那是一些不贊成使用的語法嗎?
如手冊中所述,在Bash中定義函數時, function
關鍵字是可選的:
使用以下語法聲明函數:
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 `('
在這里, 'foo'
被同名別名的文本替換,因為它是命令的第一個單詞 。 使用function
,別名不會擴展:
$ function foo() { :; }
在功能名稱也是別名的極少數情況下,必須使用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.
使用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.
保留字function
是可選的。 請參見bash手冊頁中的“ Shell函數定義”部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.