2012-02-09 60 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