Bash函数 - 使用参数的标签创建变量

时间:2013-11-11 18:03:06

标签: bash variables parameters

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

这是我的代码:

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

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

有解决办法吗?

这就是我的目标:

var i = 1
var greeting = "hello"

并且将为这两个变量分配它们的值。

2 个答案:

答案 0 :(得分:1)

不要使用eval,将declare-g标志一起使用(创建全局变量)

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

答案 1 :(得分:0)

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

eval "$1=$3"

就是这样。

示例:

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

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

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

在这种情况下,您可以确定,"$@"中可能没有任何内容可以影响除$$1变量之外的其他内容。