У меня есть скрипт bash, который устанавливает -e, поэтому скрипт будет завершаться при любом состоянии выхода! = 0.
Я пытаюсь сделать некоторую базовую арифметику оболочки, назначенную для переменных, и иногда выражение равно 0, что приводит к состоянию выхода команды let или expr, равному «1».
Вот пример:
#!/bin/bash -ex
echo "Test 1"
Z=`expr 1 - 1` || true
echo "Z will print"
let "A=4 - 4"
echo "A WILL NEVER PRINT $A"
Y=`expr 1 - 1`
echo "Y WILL NEVER PRINT $Y"
X=$(expr 2 - 2)
echo "X WILL NEVER PRINT $X"
Выход:
$ ./test_error.sh
+ echo 'Test 1'
Test 1
++ expr 1 - 1
+ Z=0
+ true
+ echo 'Z will print'
Z will print
+ let 'A=4 - 4'
Мой вопрос заключается в том, каков идиоматический способ написания сценариев bash, позволяющий скрипту давать сбой при реальных ошибках выхода, а не при базовой арифметике, равной 0. Я мог бы суффиксить все эти выражения с помощью:
A=`expr $C - $D` || true
Но это кажется вздорным.
источник
(( A = $C - $D ))
?У меня была такая же проблема . ТЛ; др:
источник
Этот синтаксис работает для меня:
источник