내가 이거 가지고있어:
date +"%H hours and %M minutes"
나는 축제를 사용하여 그것을 말하지만 .. 그것은 "제로 아홉 시간"이라고 말합니다. "나는 아홉 시간"이라고 말하고 싶습니다!
그러나 날짜는 항상 나에게 09를 줘. 그래서 배쉬가 그것을 9로 쉽게 만들 수 있는지 궁금해?
복잡한 스크립트에서 내가 시도한
printf %d 09
그러나 그것은 실패합니다. 8 진수가 아닙니다 :(
어떤 생각?
내가 이거 가지고있어:
date +"%H hours and %M minutes"
나는 축제를 사용하여 그것을 말하지만 .. 그것은 "제로 아홉 시간"이라고 말합니다. "나는 아홉 시간"이라고 말하고 싶습니다!
그러나 날짜는 항상 나에게 09를 줘. 그래서 배쉬가 그것을 9로 쉽게 만들 수 있는지 궁금해?
복잡한 스크립트에서 내가 시도한
printf %d 09
그러나 그것은 실패합니다. 8 진수가 아닙니다 :(
어떤 생각?
답변:
귀하의 경우 날짜 문자열 형식으로 -
after %
를 추가하여 제로 패딩을 비활성화 할 수 있습니다 .%-H
기본적으로 날짜는 숫자 필드를 0으로 채 웁니다. 다음의 선택적 플래그는 '%'를 따를 수 있습니다.
-
(하이픈) 필드를 채우지 마십시오_
공백이있는 (밑줄) 패드0
0이있는 패드^
가능하면 대문자를 사용하십시오#
가능하면 반대의 경우를 사용하십시오
날짜 매뉴얼 참조
bash에서 다른베이스의 숫자를 해석하려면
- 앞에 0이있는 상수는 8 진수로 해석됩니다.
- 선행 0x 또는 0X는 16 진수를 나타냅니다.
- 그렇지 않은 경우 숫자는 [base #] n 형식을 취합니다. 여기서 base는 산술 기준을 나타내는 2에서 64 사이의 10 진수이며 n은 해당 기준의 숫자입니다.
따라서 숫자를 십진수로 해석하려면 10#n
양식을 사용하십시오 .10#09
echo $((10#09*2))
18
bash 매뉴얼의 산술 평가 섹션을 참조하십시오 .
echo $((011)) $((10#011))
는 또 다른 좋은 예입니다9 11
lat=048 ; latd=${lat#0} ; echo $((latd-1))
작동하지만 작동 lat=-048 ; latd=${lat#0} ; echo $((latd-1))
하지 않습니다.
plus=$((10#01))
날짜 값과 십진수로 비교하려고하면이 방법이 매우 효과적이라는 것을 알았습니다.
let mymin=$(date '+1%M') ; let mymin=$mymin%100
그것은 항상 십진수 값을 산출합니다. 그래서 나는 이것을 할 수 있습니다 :
if [[ $mymin -le 1 ]]; then # only 0 and 1 are true.
이 방법으로 08 또는 09에는 아무런 문제가 없습니다. % 100 대신 % 10을 사용하면 0에서 9 사이의 10 분 범위가 제공됩니다. 또한 다음과 같이 0이 나오지 않고 10 진수 값이 표시됩니다.
echo "$((10#$(date +%M)))"
다행스럽게도 0
변수에서 행간 을 쉽게 제거 할 수 있습니다 . 선행이 없으면 변수를 변경하지 않은 채로 둡니다 0
.
eval $(date +"h=%H m=%M")
h=${h#0}
m=${m#0}
say "$h hours and $m minutes"
bash, ksh 또는 zsh에서는 ksh의 추가 glob 패턴을 사용하여 여러 선행 문자를 제거 할 수 0
있습니다. bash에서 shopt -s extglob
먼저 실행하십시오 . zsh에서 setopt kshglob
먼저 실행하십시오 .
eval $(date +"h=%H m=%M")
h=${h#+(0)}
m=${m#+(0)}
say "$h hours and $m minutes"
일반적으로 bash에서 :
test ${#number} -eq 2 && number=${number#0}
~를 야기하는
date +"%H %M" |
{ read hours minutes
hours=${hours#0}
minutes=${minutes#0}
echo "${hours} hours and ${minutes} minutes"; }
또는 다른 경우 :
date +"%H hours and %M minutes" | sed -n -e 's/0\([0-9]\)/\1/g' -e p
날짜에 적절한 형식 옵션이 없다는 것에 놀랐습니다.