繁体   English   中英

声明具有进程替换的变量时,能否捕获子外壳程序的退出代码?

[英]Can the exit code of a subshell be captured when declaring a variable with process substitution?

假设set -e对于随后的所有活动都是活动的。

这将退出非零值:

x=$(false)

但是,这些都不会退出非零值:

declare x=$(false)
readonly x=$(false)
local x=$(false)

如果要声明一个可变变量,可以执行x=$(false) 但是,如果您想要一个只读变量,则必须诉诸如下代码: x=$(false) ; readonly x 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM