0
を終え、私は短い私のbashスクリプトでしょう:「?エコー」=bashの「-e」パズル:スクリプトファイルは、物事を明確にするために、予想外に
#!/bin/bash -e
p_time=$(expr 0 - 0)
echo ?
echo "process time(sec) is: " ${p_time}
ファイルには、前に終わるだろうが、私は」p_timeを変更した場合$(expr 0 - 0) "を" p_time = $(expr 3 - 0) "に変更すると、ファイルは正しく終了します。
しかし、最初の文で "-e"を削除しても、ファイルは正しく終了しています。
なぜこれが起こりますか?
これは、多くの人が '-e'オプションを使用しないことを推奨する理由の1つです。ゼロ以外の終了コードが必ずしも*エラー*を示すとは限りません。 – chepner
'set -e'の動作がどれほど穏やかで予測可能なのか疑問がある場合は、[BashFAQ#105](http://mywiki.wooledge.org/BashFAQ/105)の演習や、別のシェルの実装間の非互換性を示す表を見てください。https://www.in-ulm.de/~mascheck/various/set-e/ –
ところで、 'expr'は1970年代の遺物であり、現代のスクリプトで使用されることはありません。 'p_time = $((0 - 0))'は、1991 POSIX.2標準に準拠するすべてのシェルで動作することが保証されています(これはfork()を避けるため)。 –