将函数的返回值保存在其自己的参数之一中

将函数的返回值保存在其自己的参数之一中

这就是我想要实现的目标:

功能:

Func1() {
   $1="Hello World"
}

通话功能:

local var1
Func1 var1
echo $var1  (should echo Hello World)

我发现这个例子似乎有效,但我想使用 eval 不是一个好主意:

Func1() {
   eval $1=$str1
}

这样做的正确方法是什么?

我来自 .Net,经常使用参数作为参考。例如,将一个值赋回参数,以便稍后使用。

在上面的例子中 var1 应该被分配“Hello World”

(我使用的是sh shell)

答案1

eval如果你正确使用它就可以了:

Func1() {
  eval "$1=\$str1"
}

只要Func1仅使用您希望传递的变量名称进行调用,就是安全的。

与往常一样,您需要引用变量。和这里,$str1在传递给 之前不需要扩展eval

如果Func1可能传递不受您控制的任意字符串,那么您就会遇到类似值的问题reboot;foo,并且需要像这样清理它:

Func1() {
  case $1 in
    "" |\
    *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]* |\
    [0123456789]* |\
    BASH* | LD_* | PATH | IFS | ENV | SHELLOPTS | PERL5LIB | PYTHON_PATH |...)
      echo >&2 "Can't set that variable"
      return 1
  esac
  eval "$1=\$str1"
}

列出完整的清单有问题的不过,变量是一项注定失败的任务。

相关内容