2

次のコードを実行しています。計算が 8 進数で行われている理由がわかりません。このコードを改善するにはどうすればよいですか?

#!/bin/bash
gmthour=$(date -u +%H)
localhour=$(date +%H)
echo $gmthour
echo $localhour
tz=$(( gmthour - localhour ))
echo $tz

エラー

22
08
MyFile.ksh: line 6: 08: value too great for base (error token is "08")
4

2 に答える 2

1

これはどう?

tz=$(( 10#$gmthour - 10#$localhour ))

計算が8進数で行われている理由がわかりません

先行ゼロがある場合、数値は基数 8 であると解釈されるためです。これを防ぐには、シェルに基数 10 で数値を解釈させることができます10#。しかし、あなたのコメントを見て、この場合はドル記号を明示的に使用する必要があることを強調させてください.

お役に立てれば!

于 2013-07-01T22:27:58.223 に答える