取消设置变量然后使用它的值

取消设置变量然后使用它的值

sourced 文件中,我想返回特定命令的退出状态,我将其存储在变量 中return_val

如何取消设置此变量(以免污染名称空间),并仍然返回它的值?

答案1

如果您使用的 shell 支持局部变量(例如 ksh、bash 或 zsh),请将所有代码放入函数中并将所有变量声明为局部变量。

使用普通 sh,您可以eval在使用值之前执行变量扩展。返回状态仅包含数字,因此您甚至不需要棘手的引用。

eval "unset return_status; return $return_status"

答案2

我使用 STDOUT 来保留变量内容的副本:

# Unset a variable and then use its value afterwards
echo $_return_val | { unset _return_val; return "$(cat)"; }

答案3

您可以使用带有局部变量的函数

return_exit () {
    local code=${!1}
    unset "$1"
    return "$code"
}

然后这样称呼它:

return_exit _return_val

答案4

由于您的愿望和解决方案的想法与标准中未指定的部分相冲突,因此我建议使用中间变量来存储该值。

当然,只有当您希望将该方法应用于多个变量时,这才有意义。您可以使用$REPLY各种 shell 中不可或缺的变量。

请注意,没有{ cmd; }不创建子 shell 的授权,因此即使调用unset此类构造也可能不适用于主 shell。

使用

echo "$_return_val" && unset _return_val

在我想到的所有情况下都应该是你喜欢的。

相关内容