在source
d 文件中,我想返回特定命令的退出状态,我将其存储在变量 中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
在我想到的所有情况下都应该是你喜欢的。