sh-5.0$ 中的 bash 函数和范围

sh-5.0$ 中的 bash 函数和范围

我尝试编写我的第一个 bash 函数但遇到了错误。

test() {
$1=/home;
}

我希望该函数将任何变量设置为/home。

预期示例:

test TEST
echo $TEST
/home

示例得到:

test TEST
sh: TEST=/home: No such file or directory
echo TEST

你能告诉我如何达到我的预期输出以及为什么我失败了吗?

答案1

通常,使用变量作为变量名会产生意想不到的错误。您应该能够做到这一点,但这需要大量转义。

如果您无论如何都想这样做,请使用eval(shell 内置):

test() {
eval $1=/home
}

由于这是您的第一个功能,请允许我给您一些额外的提示。

  • test通常是/usr/bin/test。如果你用它作为函数名,你需要/usr/bin/test用它的全名来调用。最好使用my_test或类似的东西。
  • 以这种方式将变量用作左值(“左值”)的情况很少见。这种情况很少见,甚至 shellcheck 也会对此感到困惑。

相关内容