Bash「二重角かっこ」算術拡張を使用すると、前にゼロがあると数学は失敗します。

Bash「二重角かっこ」算術拡張を使用すると、前にゼロがあると数学は失敗します。

時間と分を処理する簡単なスクリプトがあります。

文字列sを使用して真夜中の後の分数を計算するには、hh:mm文字列を分割して次のようにします。hh * 60 + mm

私の質問はそうです。

$ (( tot = 12 * 60 + 30 ))
$ echo $tot
750

代わりに

$ (( tot = 09 * 60 + 30 ))
bash: ((: tot = 09: value too great for base (error token is "09")

私が理解している限り、文字列は0910進数ではありません。

単に文字列から先行ゼロを削除するよりも良い方法はありますか?

ベストアンサー1

h=09; m=30;(( tot = 10#$h * 60 + 10#$m )); echo $tot  

前の数字 #は基数(または基数)です。
次の数字は#基数に有効でなければなりません。
出力は常に10進数です。
次の基数を使用できます2~64(GNU bash 4.1.5から)

Bashには前にマイナス記号が必要なので、10#数字にマイナス記号がある場合は10#プレフィックスを直接追加しても機能しません。

指摘したとおりウンジョイブ、以前の回避策は廃止$[expression]予定なので、POSIX 互換を使用することをお勧めします$((expr))

$(( 2#1)) ==  1
$((16#F)) == 15
$((36#Z)) == 35  

後でどのような「数字」が使用されているのか分かりません。Z

おすすめ記事