2012-02-09 11 views
1

を定義するとき、私は入力することができます。 補間ルールプロンプトで機能

 
$ e() { echo $1; } 
をし、その最初の引数をエコー機能を取得します。なぜこれが機能するのかわかりません。

 
$ e() { echo ; } 

何ですか、この動作を可能に関連する引用/補間ルール:$ 1は現在の環境で定義されていないので、上記と同等であるべきと思われますか?これは、$1が特別であることとは関係がないことに注意してください。$FOOを使用すると、関数の定義時に$FOOの値ではなく、関数が呼び出されたときに$FOOの値をエコーする関数が得られます。

答えて

1

それはセクション2.9.5でかなり明確なので、私は、これを逃したかわからない:

関数が宣言されている

、のwordexpでの拡張のいずれも行われてはなりません複合コマンドまたはioリダイレクトのテキストについてすべての拡張は、関数が呼び出されるたびに通常どおり実行されます。同様に、オプションのio-redirectリダイレクションとcompound-command内の変数の割り当ては、関数定義の実行ではなく、関数自体の実行中に実行されます。インタラクティブシェルおよび非インタラクティブシェルでのこれらの操作の失敗の結果については、「シェルエラーの結果」を参照してください。

+0

つまり、関数宣言内のコードは、関数を作成するときに実行されるときに実行されます。 – l0b0

0

$1のような変数は、コマンドラインから渡されるパラメータを表す特殊変数です。ここでの「位置パラメータ」を参照してください:http://tldp.org/LDP/abs/html/internalvariables.html

+0

$ 1ではなく$ FOOで全く同じ動作が発生します –

関連する問題