Eu tenho um script bash que define -e, para que o script saia em qualquer status de saída! = 0.
Estou tentando fazer uma aritmética básica de shell atribuída a variáveis e, às vezes, a expressão é igual a 0, o que faz com que o status de saída do comando let ou expr seja "1".
Aqui está um exemplo:
#!/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"
A saída é:
$ ./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'
Minha pergunta é qual é a maneira de script idiomático do bash para permitir que o script falhe em erros de saída reais e não na aritmética básica igual a 0. Eu poderia sufocar todas essas expressões com:
A=`expr $C - $D` || true
Mas isso parece hacky.
fonte
(( A = $C - $D ))
?Eu tive o mesmo problema . tl; dr:
fonte
Essa sintaxe funciona para mim:
fonte