Shell
將函式的返回值保存在其自己的參數之一中
這就是我想要實現的目標:
功能:
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" }
不過,列出有問題的變數的完整列表是一項注定要完成的任務。