2012-02-09 59 views
1

當一個提示,我可以輸入:插值規則定義一個函數

 
$ e() { echo $1; } 

,並得到呼應其第一個參數的函數。我不明白爲什麼這會起作用。因爲$ 1當前的環境是不確定的,似乎上面的應該是等同於:

 
$ e() { echo ; } 

什麼是相關報價/內插規則,允許這種行爲?請注意,這與$1非常特別無關:如果您使用的是$FOO,那麼函數調用時會得到一個函數,它會在函數調用時回調$FOO的值,而不是函數定義時的值$FOO

回答

1

不知道我怎麼錯過了這個,因爲它是在第2.9.5節很清楚:

當聲明函數時,應進行無在wordexp的擴張的在複合命令或io-redirect中的文本上;每次調用函數時,所有的擴展都應該照常進行。同樣,可選的io-redirect重定向和複合命令中的任何變量賦值都應在函數本身執行期間執行,而不是函數定義。請參閱Shell錯誤的後果,瞭解這些操作在交互式和非交互式shell上的失敗後果。

+0

換句話說,函數聲明中的代碼在運行函數時運行,而不是在創建函數時運行。 – l0b0 2012-02-09 16:33:16