ついに

ついに

エポック形式で2つの日付の違いを取得し、その数を再び日数に変換しようとしています。

EXPIRYEPOCH=$(date --date="$EXPIRYDATE" +%s)
TODAYEPOCH=$(date --date="$TODAYSDATE" +%s)
DAYSLEFT=$(expr ($EXPIRYEPOCH - $TODAYEPOCH) / 86400 )

DAYSLEFT上記の計算は失敗します。一方、以下の単一減算の計算は成功します。

DAYSLEFT=$(expr $EXPIRYEPOCH - $TODAYEPOCH)

DAYSLEFT変数を設定する正しい形式は何ですか(最初に減算して分割する)?

ベストアンサー1

次のように(廃止予定のものを使用しないでくださいexpr):

dayleft=$(( arithmetic expression ))

浮動小数点数が必要な場合、使用代わりに:

dayleft=$(bc -l <<< "scale=2; 100/3")

記載されているようにスティーブン・チャジェラス参考までに、およびksh93は、および内の浮動小数点数をzshサポートします。yash$((...))((...))

expr古代のシェルコードで数学を実行するために使用されるプログラムです。 bashなどのPosixシェルはを使用します$(( expression ))。 bash、ksh88+、mksh/pdksh、またはzshでは、(( expression ))またはを使用することもできます。let expression


((...))式が 0 でない場合は終了状態 0 を返し、式が 0 の場合は 1 を返す算術コマンドです。副作用(割り当て)が必要な場合は、「let」の同義語としても使用されます。バラよりhttp://mywiki.wooledge.org/ArithmeticExpression


$((...))算術置換です。算術演算が完了すると、内容全体が式の値に置き換えられます。バラよりhttp://mywiki.wooledge.org/ArithmeticExpression


コマンドの置き換え:"$(cmd "foo bar")""cmd"コマンドは "foo bar"引数で実行され、"$(..)"出力に置き換えられます。バラよりhttp://mywiki.wooledge.org/BashFAQ/002そしてhttp://mywiki.wooledge.org/CommandSubstitution


使用を避ける首都システム使用のために予約された変数


ついに

expiryepoch=$(date --date="$expirydate" +%s)
todayepoch=$(date --date="$todaysdate" +%s)
dayleft=$(bc <<< "scale=2; (todayepoch - expiryepoch) / 86400")

おすすめ記事