J'ai un script bash qui définit -e afin que le script se termine sur n'importe quel état de sortie! = 0.
J'essaie de faire une arithmétique de base du shell affectée aux variables et parfois l'expression est égale à 0, ce qui fait que l'état de sortie de la commande let ou expr est "1".
Voici un exemple:
#!/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"
La sortie est:
$ ./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'
Ma question est quelle est la manière idiomatique de script bash pour permettre au script d'échouer sur de vraies erreurs de sortie et non sur une arithmétique de base égale à 0. Je pourrais suffixer toutes ces expressions avec:
A=`expr $C - $D` || true
Mais cela semble bizarre.
la source
(( A = $C - $D ))
?J'ai eu le même problème . tl; dr:
la source
Cette syntaxe fonctionne pour moi:
la source