我正在尝试创建一个函数,该函数将使用标记$ 1(第一个参数)和值$ 3(第三个参数)创建变量。
这是我的代码:
function var
{
if [ "$2" = "=" ]; then
$1 = $3
fi
}
现在,我认为这不起作用的原因是因为我编写此函数的方式使bash尝试用$ 3覆盖$ 1的值。
有解决办法吗?
这就是我的目标:
var i = 1
var greeting = "hello"
并且将为这两个变量分配它们的值。
答案 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
变量之外的其他内容。