Tengo un script bash que establece -e para que el script salga en cualquier estado de salida! = 0.
Estoy tratando de hacer una aritmética de shell básica asignada a las variables y, a veces, la expresión es igual a 0, lo que hace que el estado de salida del comando let o expr sea "1".
Aquí hay un ejemplo:
#!/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"
El resultado es:
$ ./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'
Mi pregunta es cuál es la forma idiomática de secuencias de comandos bash para permitir que la secuencia de comandos falle en errores de salida reales y no en aritmética básica igual a 0. Podría sufijar todas esas expresiones con:
A=`expr $C - $D` || true
Pero eso parece hacky.
fuente
(( A = $C - $D ))
?Yo tenía el mismo problema . tl; dr:
fuente
Esta sintaxis funciona para mí:
fuente