在提示符下,我可以输入:
$ e() { echo $1; }
并获得一个与其第一个参数相呼应的函数。我不明白为什么会这样。由于在当前环境中$ 1未定义,因此上述内容似乎应相当于:
$ e() { echo ; }
允许此行为的相关引用/插值规则是什么?请注意,这与$1
特殊无关:如果使用$FOO
,则会在调用函数时获得与$FOO
的值相呼应的函数,而不是值定义函数时的$FOO
。
答案 0 :(得分:1)
不确定我是如何错过这一点的,因为在第2.9.5节中非常清楚:
声明该函数时,不应对复合命令或io重定向中的文本执行wordexp中的任何扩展;每次调用函数时,所有扩展都应该正常执行。类似地,可选的io-redirect重定向和compound-command中的任何变量赋值都应在函数本身的执行期间执行,而不是函数定义。请参阅Shell错误的后果,了解这些操作在交互式和非交互式shell上失败的后果。
答案 1 :(得分:0)
$1
之类的变量是表示从命令行传递的参数的特殊变量。请参阅"位置参数"部分:http://tldp.org/LDP/abs/html/internalvariables.html