Ich habe ein Bash-Skript, das -e setzt, damit das Skript bei jedem Exit-Status beendet wird! = 0.
Ich versuche, eine grundlegende Shell-Arithmetik auszuführen, die Variablen zugewiesen ist, und manchmal ist der Ausdruck gleich 0, was bewirkt, dass der Beendigungsstatus des Befehls let oder expr "1" ist.
Hier ist ein Beispiel:
#!/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"
Die Ausgabe ist:
$ ./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'
Meine Frage ist, wie man es mit idiomatischen Bash-Skripten schafft, dass das Skript bei echten Exit-Fehlern und nicht bei einer Grundrechenart von 0 fehlschlägt. Ich könnte all diese Ausdrücke mit folgendem Suffix versehen:
A=`expr $C - $D` || true
Aber das scheint verrückt zu sein.
quelle
(( A = $C - $D ))
?Ich hatte das gleiche Problem . tl; dr:
quelle
Diese Syntax funktioniert für mich:
quelle