我正在尝试将命令输出分配给变量并捕获状态。它按预期工作:
$ foo=$(false); echo $?
1
直到我试图使readonly变量:
$ readonly foo=$(false); echo $?
0
我知道我可以拥有临时的rw变量然后将它分配给ro变量,但我很失望。 ;)有更优雅的方式吗?
答案 0 :(得分:3)
您可以分两步完成,无需临时变量:
foo="$(false)"
echo $?
readonly foo
或者你可以做
readonly foo="$(false)" status="$?"
同时捕获输出和退出状态。
答案 1 :(得分:2)
readonly
,如local
和declare
,本身就是一个命令,具有自己的退出状态。
因此,您应该从要捕获其退出状态的分配中单独运行这些命令,以避免收集readonly
命令的退出状态。在这种情况下:
foo=$(something); foo_retval=$?
readonly foo
这是在为函数赋值变量之前在函数local first 中定义变量的常见做法的变体。