Ответ 1
Проблема заключается в том, что readonly
- это собственная команда, а возвращаемый код, который он возвращает, - это собственный код выхода, а не код выхода подстановки команды.
От help readonly
:
Статус выхода:
Возвращает успех, если не указана недопустимая опция или NAME недействителен.
Итак, вам нужно использовать две отдельные команды:
$ output=$(false)
$ readonly res=$?
$ readonly output
Это сохраняет код выхода, который вы хотите:
$ echo $res
1
За исключением ввода отладчика, невозможно отключить переменную readonly. Таким образом, не устанавливайте переменную readonly, если вы не хотите, чтобы она оставалась постоянной для оставшейся части сеанса bash.
Изменение
Две команды readonly
могут быть объединены в один (tip tip: Chepner):
$ output=$(false)
$ readonly output res=$?
$ echo $res
1
Помимо
Лучше всего использовать имена с меньшим или смешанным регистром для ваших переменных. Система использует все имена верхнего регистра, и вы не хотите случайно перезаписывать системную переменную.