假设set -e
对以下所有内容都有效。
这将退出非零:
x=$(false)
但是,这些都不会非零退出:
declare x=$(false)
readonly x=$(false)
local x=$(false)
如果你想声明一个可变变量,你可以这样做x=$(false)
。但是如果你想要一个只读变量,你必须求助于这样的事情:x=$(false) ; readonly x
但是,如果你在一个函数中并且你想要一个局部的、只读的变量,你不能这样做
x=$(false) ; local -r x
因为您将覆盖全局 x。
您可以local x=$(false)
尝试手动检查 x 以查看是否有错误。或者,您可以检查 stderr 上的输出。但是,这些都不适用于所有情况。而且,它们很麻烦。
分配结果时,有没有办法从进程替换中获取退出代码?
要检查进程替换的状态,赋值必须是语句执行的唯一操作。在诸如 之类的语句中local x=$(false)
,返回的值是 local 的状态,通常会成功。要在函数中创建局部只读变量并检查进程替换的分配,您可以执行以下操作:
local x
x=$(false) || echo "assigment of x failed !!" >&2
readonly x
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句