2017-12-27 13 views
2

以下のコードの構文が間違っているのだろうか?bashの 'let'という奇妙なエラー

#!/bin/bash 
set -e 
let "time_used = 1 - 1" 
echo $time_used 

実行すると何も印刷されません。このスクリプトはlet "time_used = 1 - 1"で死んだ。

2行目でset -eを削除すると、正しい結果が得られます。0

どうしてですか?

+0

を参照してください: ''てみましょうのようなあなたがゼロでない場合のために試みることによって把握でき – Cyrus

+0

let'ヘルプは、「time_used = 2から1」 'その場合、あなたはecho'出力 – Inian

答えて

2

LETは

let "time_used = 1 - 1" 

arithmenticシェルのbash built-inことは、シェルにおけるしかしながら

((time_used = 1 - 1)) 

0に相当する算術-e|| trueで終了することを回避するために偽の手段と、エラー終了ステータスを与えることができコマンドの後に追加する。

((0)) || true 
let "time_used = 1 - 1" || true 

|| trueは、エラー終了ステータスを返すコマンドに対して-eオプションをバイパスすることができますが、失敗したコマンドを偽の終了ステータスを返すコマンドと区別することはできません。他のオプションは、算術を使用して常に真理値を返すことです。

(((time_used = 1 - 1) || 1)) 
+0

OPが使用している'見るでしょう'set -e'です。 – PesaThe

+0

それはありません!他の答えを参照してください – Inian

+0

私は私の答えを更新していた –

2

結果が0の場合、let1を返します。 それ以外の場合は、0を返します。

$ help let | tail -n2 終了ステータス: 最後のARGが0と評価された場合、1を返します。そうでない場合は0を返します。