エポック形式で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")