声明带有进程替换的变量时,是否可以捕获子 shell 的退出代码?
Can the exit code of a subshell be captured when declaring a variable with process substitution?
假设 set -e
对以下所有内容都有效。
这将退出非零:
x=$(false)
但是,其中 none 个将以非零值退出:
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
假设 set -e
对以下所有内容都有效。
这将退出非零:
x=$(false)
但是,其中 none 个将以非零值退出:
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