0
我在外壳下面的代码外壳采用函数参数
#!/bin/sh
function myfunc
{
$1=3
echo "myvar = $myvar"
}
myfunc myvar
预期的结果声明变量。
我将调用该函数并给它一个参数。我想在INSIDE中声明该参数。换句话说,我在调用函数时选择变量的名称。
但它不工作...
我在外壳下面的代码外壳采用函数参数
#!/bin/sh
function myfunc
{
$1=3
echo "myvar = $myvar"
}
myfunc myvar
预期的结果声明变量。
我将调用该函数并给它一个参数。我想在INSIDE中声明该参数。换句话说,我在调用函数时选择变量的名称。
但它不工作...
以下任何方式将工作:
let $1=3
export $1=3
local $1=3
eval $1=3
注意,其中一些替代品有副作用,更具体有关变量的可见性。
这工作!!!!! 但是有可能知道它为什么起作用吗? “导出”到底做了什么?除了在这些情况下如何使用? – Masster
好吧,简单来说,这是由于shell的解析规则。解析器尝试匹配模式“<变量名> =”或命令表达式。变量替换在生产规则“<变量名>”中是不可接受的,所以变量替换后的“$ var = 12 34 45”将被解释为要执行的程序的名称(类似于“bar = 12”,其中参数“34”和“45”)。 –
jwatkins
至于“导出”buit-in命令,两者都为变量分配一个值,并标记要导出的变量,即复制到子进程的环境。 – jwatkins