0

我正在尝试创建一个函数,该函数将创建一个带有标签 $1(第一个参数)和值 $3(第三个参数)的变量。

这是我的代码:

function var
{
    if [ "$2" = "=" ]; then
        $1 = $3
    fi
}

现在,我相信这不起作用的原因是因为我编写此函数的方式使 bash 尝试用 $3 的值覆盖 $1 的值。

有解决办法吗?

这就是我的目标:

var i = 1
var greeting = "hello"

并且这两个变量都将被赋值。

4

2 回答 2

1

不要使用evaldeclare-g标志一起使用(创建全局变量)

function var {
    if [ "$2" = "=" ]; then
        declare -g "$1=$3"
    fi
}
var foo = bar
echo $foo
bar
于 2013-11-11T18:10:30.510 回答
0

如果您想要一个便携式解决方案,只需使用eval

eval "$1=$3"

这就对了。

例子:

 $ function var
 {
   if [ "$2" = "=" ]; then
     eval "$1=$3"
   fi
 }
 $ var a = 10
 $ echo $a
 10

如果您的脚本适用于 bash 4+,则可以使用declarewith -gkey(感谢glenn jackman),它在全局范围内声明一个变量,而不仅仅是在函数范围内:

 $ function var
 {
   if [ "$2" = "=" ]; then
     declare -g "$1=$3"
   fi
 }
 $ var a = 10
 $ echo $a

在这种情况下,您可以肯定,除了变量之外,没有任何"$@"东西可以影响其他东西。$$1

于 2013-11-11T18:05:24.243 回答