前導零是什麼導致數字被解釋爲八進制。從man bash
報價:
算術求
[...]
常量與一家領先的0被解釋爲八進制數。前導的0x或0X表示十六進制。否則,數字採用[base#] n的形式,其中可選基數是2到64之間的十進制數,代表算術基數,n是該基數中的數字。如果鹼基#被省略,則使用鹼基10。
更改date
命令的格式字符串%k
或%_H
擺脫前導零:
#!/bin/bash
gmthour=$(date -u +%k)
localhour=$(date +%k)
echo $gmthour
echo $localhour
tz=$((gmthour - localhour))
echo $tz
當心,你的計算將打破日更改時。例如:
$ date
Di 2. Jul 00:50:29 CEST 2013
$ gmthour=$(date -u +%k)
$ localhour=$(date +%k)
$ echo $gmthour
22
$ echo $localhour
0
$ echo $((gmthour - localhour))
22
CEST顯然不是UTC + 22。
試試這個:
#!/bin/bash
gmthour=$(date -u +%k)
localhour=$(date +%k)
echo $gmthour
echo $localhour
if [ $(date +%w) -eq $(date -u +%w) ]; then
tz=$((gmthour - localhour))
else
tz=$((24 - gmthour + localhour))
fi
echo $tz
不能重複這個問題,慶典的什麼版本? – michael501
礦是bash-3.00。我猜你是否得到這個問題將取決於localhour/gmthour是否已經領先零。 – misguided