Я делаю простые вычисления в bash, и я заметил, что вычисления bash с использованием expr
возвращают , если результат вычисления равен нулю.Почему вычисления bash возвращают 1, если результат равен нулю
[email protected]:~$ expr 42 - 40 ; echo $?
2
0
[email protected]:~$ expr 42 - 84 ; echo $?
-42
0
[email protected]:~$ expr 42 - 42 ; echo $?
0
1
Почему это так? Не является ли возвращаемое значение индикацией того, что программа не удалась? Разве это поведение не нарушает хорошую практику?
Я делаю некоторые вычисления внутри сценария, запущенного с set -e
. Каков наилучший способ учета возвращаемого значения 1? я мог бы сделать
expr $var1 - $var2 || true
, но это также будет игнорировать другие коды выхода, чем .
'человек expr': _Exit статус 0 если EXPRESSION не является ни null, ни 0, 1, если EXPRESSION имеет значение null или 0, 2, если EXPRESSION синтаксически недействительна, и 3, если произошла ошибка. Также не используйте 'expr' для арифметики, говорят, –
см. также http : //unix.stackexchange.com/questions/63166/bash-e-exits-when-let-or-expr-evaluates-to-0 – Roland
Я голосую, чтобы закрыть этот вопрос как вне темы, потому что на лизинге t сначала прочитайте страницу руководства. –