在bash中'readonly'退出状态

时间:2018-05-10 13:14:34

标签: bash

我正在尝试将命令输出分配给变量并捕获状态。它按预期工作:

$ foo=$(false); echo $?
1

直到我试图使readonly变量:

$ readonly foo=$(false); echo $?
0

我知道我可以拥有临时的rw变量然后将它分配给ro变量,但我很失望。 ;)有更优雅的方式吗?

2 个答案:

答案 0 :(得分:3)

您可以分两步完成,无需临时变量:

foo="$(false)"
echo $?
readonly foo

或者你可以做

readonly foo="$(false)" status="$?"

同时捕获输出和退出状态。

答案 1 :(得分:2)

readonly,如localdeclare,本身就是一个命令,具有自己的退出状态。

因此,您应该从要捕获其退出状态的分配中单独运行这些命令,以避免收集readonly命令的退出状态。在这种情况下:

foo=$(something); foo_retval=$?
readonly foo

这是在为函数赋值变量之前在函数local first 中定义变量的常见做法的变体。