Mam skrypt bash, który ustawia -e, więc skrypt zakończy działanie w dowolnym stanie wyjścia! = 0.
Próbuję wykonać podstawową arytmetykę powłoki przypisaną do zmiennych, a czasami wyrażenie jest równe 0, co powoduje, że stanem wyjścia komendy let lub expr jest „1”.
Oto przykład:
#!/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"
Dane wyjściowe to:
$ ./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'
Moje pytanie brzmi: w jaki sposób idiomatyczny skrypt bash pozwala na niepowodzenie skryptu w przypadku rzeczywistych błędów wyjścia, a nie w przypadku podstawowej arytmetyki równej 0. Mogłem sufikować wszystkie te wyrażenia za pomocą:
A=`expr $C - $D` || true
Ale to wydaje się hacking.
źródło
(( A = $C - $D ))
?Miałem ten sam problem . tl; dr:
źródło
Ta składnia działa dla mnie:
źródło