Shell

將函式的返回值保存在其自己的參數之一中

  • September 6, 2016

這就是我想要實現的目標:

功能:

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

呼叫函式:

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

我發現這個例子似乎可行,但我想使用 eval 不是一個好主意:

Func1() {
  eval $1=$str1
}

這樣做的正確方法是什麼?

我來自.Net,經常使用參數作為參考。例如,將值分配回參數,然後可以稍後使用。

在上面的範例中,應為 var1 分配“Hello World”

(我正在使用 sh 外殼)

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"
}

不過,列出有問題的變數的完整列表是一項注定要完成的任務。

引用自:https://unix.stackexchange.com/questions/296175