bash函数中的eval变量赋值使变量成为局部变量

时间:2016-10-17 05:28:48

标签: bash sh ash

我正在尝试this question(bash< = 4兼容的部分)的答案,当我注意到如果以下行在函数内或函数外,bash表现不同。在函数中,eval创建的变量是局部变量,这是奇怪的,因为eval字符串中没有本地关键字。

eval "$({ berr=$({ bout=$("$@"); bret=$?; } 2>&1; declare -p bout bret >&2); declare -p berr; } 2>&1)"

function captureStdOutRetCode () {
  eval "$({ berr=$({ bout=$("$@"); bret=$?; } 2>&1; declare -p bout bret >&2); declare -p berr; } 2>&1)"
}
echo "_${bout}_${berr}_${bret}_" # ____

我的最终目标是将其移植到与ash兼容的东西,并且可以作为函数调用。我的计划是用declare替换echo "bout='$bout'"位,因为在我的情况下我知道命令的输出对eval是安全的,而没有declare提供的转义(或者提供至少bash

0 个答案:

没有答案