앞에 오는 0은 숫자가 8 진수로 해석되도록합니다. man bash
에서 인용구 :
산술 평가
[...] 선두 0
상수는 8 진수로 해석됩니다. 선행하는 0x 또는 0X는 16 진수를 나타냅니다. 그렇지 않은 경우 숫자는 [base #] n 형식을 취합니다. 여기서 선택적 기본은 산술 자료를 나타내는 2에서 64 사이의 10 진수이고 n은 해당 기준의 숫자입니다. base #가 생략되면 base 10이 사용됩니다. %k
또는 %_H
에 date
명령의 형식 문자열 앞에 0을 제거하는
변경 :
#!/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
이 문제의 bash의 버전을 복제 할 수 없습니다? – michael501
광산은 bash-3.00입니다. 나는 당신이 이슈를 얻었는지 아닌지를 추측한다. localhour/gmthour가 0을 나타내는 지 여부에 의존한다. – misguided