我正在尝试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
。