2013-10-23 39 views
0

我在外壳下面的代码外壳采用函数参数

#!/bin/sh 

function myfunc 
{ 
    $1=3 
    echo "myvar = $myvar" 
} 

myfunc myvar 

预期的结果声明变量。

我将调用该函数并给它一个参数。我想在INSIDE中声明该参数。换句话说,我在调用函数时选择变量的名称。

但它不工作...

回答

2

以下任何方式将工作:

let $1=3 
export $1=3 
local $1=3 
eval $1=3 

注意,其中一些替代品有副作用,更具体有关变量的可见性。

+0

这工作!!!!! 但是有可能知道它为什么起作用吗? “导出”到底做了什么?除了在这些情况下如何使用? – Masster

+0

好吧,简单来说,这是由于shell的解析规则。解析器尝试匹配模式“<变量名> = ”或命令表达式。变量替换在生产规则“<变量名>”中是不可接受的,所以变量替换后的“$ var = 12 34 45”将被解释为要执行的程序的名称(类似于“bar = 12”,其中参数“34”和“45”)。 – jwatkins

+0

至于“导出”buit-in命令,两者都为变量分配一个值,并标记要导出的变量,即复制到子进程的环境。 – jwatkins