초를 hh:mm:ss로 변환하기 위해 printf에 전달되는 형식은 무엇입니까?

초를 hh:mm:ss로 변환하기 위해 printf에 전달되는 형식은 무엇입니까?

다음 형식의 지침을 보고 있습니다.

$ printf [format] $elapsed

초 단위 로 표현됩니다 $elapsed. "hh:mm:ss"를 출력하고 싶습니다. 나는 format그것을 이해할 수 없다남성. 누구든지 제안을 할 수 있나요?

답변1

printfksh93 셸의 내장 기능을 사용하고 $elapsed86400(1일) 미만이라고 가정하면 다음과 같습니다.

TZ=UTC0 printf '%(%T)T\n' "#$elapsed"

또는 printf최신 버전의 bash 셸에 내장된 기능을 사용하세요(ksh93 기능의 하위 집합을 호환되지 않는 방식으로 복사함).

TZ=UTC0 printf '%(%T)T\n' "$elapsed"

%(strftime-format)T타임스탬프로 해석되는 매개변수를 취하고 strftime()형식 사양에 따라 형식을 지정하는 ksh93 확장입니다. 여기서 %T약어는 %H:%M:%SHH:MM:SS 24시간 형식으로 시간을 제공합니다. Unix epoch 시간 ksh93을 포함하여 다양한 타임스탬프 형식을 처리하며 다음 과 같이 해석되는 경우를 제외하고 Unix epoch 시간으로 해석되는 숫자만 처리합니다.#numberbash-1지금그리고 -2쉘이 호출된 시간으로 해석됩니다.

zsh셸과 strftime내장 구성요소를 사용하세요 .

zmodload zsh/datetime
TZ=UTC0 strftime %T $elapsed

GNU 또는 busybox 사용 date:

date -ud "@$elapsed" +%T

$elapsed이는 기본적으로 1970-01-01 00:00:00 +0000 이후의 Unix 초 수인 Unix epoch 시간으로 해석되므로 1970년 1월 1일에 해당하는 UTC 시간을 얻을 TZ=UTC0수 있습니다 .-u

그런데,당신이 링크한 매뉴얼 페이지printfGNU 구현과 printf내장 bashGNU 셸( printf표준 유틸리티의 완벽하게 호환되지 않는 두 가지 구현) 간의 혼합을 문서화하려는 시도(및 실패)처럼 보입니다 . 저는 해당 사이트를 신뢰하지 않습니다.

달리기man printf 귀하의 시스템에서매뉴얼 페이지 받기당신의독립 printf실행형 유틸리티 또는 info bash printf또는 info zsh printf매뉴얼 페이지당신의printfshell zsh나 bash 에는 자체 내장 문서가 없습니다 (대부분의 쉘에는 있습니다).


1 그러나 fish쉘 내에서 실행 하면 man printfFish 내장 기능에 대한 매뉴얼 페이지가 제공됩니다 printf.

관련 정보