簡體   English   中英

在某些bash腳本中使用的'function'關鍵字是什么?

[英]What is the 'function' keyword used in some bash scripts?

例如: Bash-Prog-Intro-HOWTO

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM