例如: Bash-Prog-Intro-HOWTO什麼是在某些bash腳本中使用的'function'關鍵字?
function foo() {}
我做搜索查詢info bash
,並期待在POSIX的releted章節功能關鍵字,但沒有找到。
什麼是function
關鍵字在某些bash腳本中使用?那是一些不贊成的語法?
例如: Bash-Prog-Intro-HOWTO什麼是在某些bash腳本中使用的'function'關鍵字?
function foo() {}
我做搜索查詢info bash
,並期待在POSIX的releted章節功能關鍵字,但沒有找到。
什麼是function
關鍵字在某些bash腳本中使用?那是一些不贊成的語法?
的function
關鍵字是可選的,如在記錄的manual:
函數是使用此語法宣稱:
name() compound-command [ redirections ]
或
function name [()] compound-command [ redirections ]
語法的第一種形式通常是首選,因爲它與Bourne/Korn/POSIX腳本兼容,因此更便於攜帶。
也就是說,有時您可能需要使用function
關鍵字來防止Bash aliases與您的函數名稱發生衝突。考慮下面這個例子:
$ alias foo="echo hi"
$ foo() { :; }
bash: syntax error near unexpected token `('
這裏,'foo'
由同名的別名的文本替換,因爲它是命令的第一個字。隨着function
別名沒有展開:
$ function foo() { :; }
保留字function
是可選的。請參閱bash man page中的「殼體功能定義」部分。限定在擊的功能時
的function
關鍵字是在罕見的情況下,必要時在函數名也是一個別名。沒有它,猛砸解析函數定義之前擴大了別名 - 可能不是你想要什麼:
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.
這是關鍵字*非* -POSIX? – gavenkoa
@gavenkoa [是](http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29)。當使用'function'關鍵字時,Bash函數聲明與Bourne/Korn/POSIX腳本不兼容。 –
請注意,在Korn shell中,在聲明函數的兩種方法(由於範圍變量不是POSIX)之間'typedef''變量的範圍有所不同。 – cdarke