は: Bash-Prog-Intro-HOWTO一部のbashスクリプトで使用されている 'function'キーワードは何ですか?例えば
function foo() {}
私はinfo bash
に検索クエリを作成してい機能キーワードが、何のためにPOSIXのreleted章に見えます。
一部のbashスクリプトではfunction
というキーワードが使用されていますか?それは廃止された構文ですか?
は: Bash-Prog-Intro-HOWTO一部のbashスクリプトで使用されている 'function'キーワードは何ですか?例えば
function foo() {}
私はinfo bash
に検索クエリを作成してい機能キーワードが、何のためにPOSIXのreleted章に見えます。
一部のbashスクリプトではfunction
というキーワードが使用されていますか?それは廃止された構文ですか?
function
キーワードは、オプションです:
機能は、この構文を使用して宣言されています
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の「シェル関数の定義」を参照してください。バッシュで関数を定義するときmanualに記載されているように
function
キーワードは、まれに必要です。それがなければ、バッシュは、関数定義を解析する前にエイリアスを展開する - おそらくないあなたが欲しいもの:意図したとおりに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.
、物事は仕事:
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.
このキーワードは* NON * -POSIXですか? – gavenkoa
@gavenkoa [はい](http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29)。 'function'キーワードを使用する場合、Bash関数宣言はBourne/Korn/POSIXスクリプトと互換性がありません。 –
Kornシェルでは、(スコープ付き変数はPOSIXではないので)関数を宣言する2つの方法の間で 'typedef'の変数の範囲に違いがあることに注意してください。 – cdarke