Pour rendre les choses claires, je voudrais court mon script bash:bash "-e" puzzler: fichier script terminé de façon inattendue
#!/bin/bash -e
p_time=$(expr 0 - 0)
echo ?
echo "process time(sec) is: " ${p_time}
Le fichier se terminerait avant "echo?", Mais si je change « P_TIME = $ (expr 0 - 0) "to" p_time = $ (expr 3 - 0) ", le fichier se terminerait correctement.
Cependant, si j'ai supprimé "-e" dans la première phrase, le fichier s'est également terminé correctement.
Pourquoi cela se produirait-il?
C'est l'une des raisons pour lesquelles de nombreuses personnes recommandent de ne pas utiliser l'option '-e'; un code de sortie différent de zéro n'indique pas toujours une * erreur *. – chepner
Si vous avez des questions sur la justesse et la prévisibilité du comportement de 'set -e', pensez à faire les exercices dans [BashFAQ # 105] (http://mywiki.wooledge.org/BashFAQ/105), ou revoir le tableau démontrant les incompatibilités entre les implémentations de différents shells à https://www.in-ulm.de/~mascheck/various/set-e/ –
BTW, en aparté, 'expr' est une relique des années 1970 et devrait ne pas être utilisé dans les scripts modernes. 'p_time = $ ((0 - 0))' est garanti pour fonctionner avec tous les shell conformes à la norme POSIX.2 de 1991, et est * loin * plus efficace (car il évite 'fork()' sur un sous-processus). –