여러 AIX 5.3/6.1 시스템에서 ksh93을 사용하여 다음 명령을 테스트했지만 printf
모두 동일한 결과로 실패했습니다.
왜 그런 겁니까?
#
# oslevel -s
6100-07-09-1341
#
#
# ksh93 -c 'echo ${.sh.version}'
Version M-12/28/93e
#
#
# ksh93 -c 'printf "%T\n" "now"'
ksh93[1]: printf: T: unknown format specifier
#
#
답변1
%T
printf
1999년에 출시된 ksh93h의 ksh에 추가되었습니다.
참고하세요h
접미사( 있는 부분 e
)는 ksh93의 버전을 나타냅니다.
AT&T의 ksh93 최신 버전은 2012년에 출시된 ksh93u+입니다. 발전은 공동체의 공동 노력이다https://github.com/ksh93/ksh이 글을 쓰는 시점에서 최신 버전은 2023년 6월에 출시된 ksh93u+m 1.0.6이며, 수백 가지 버그를 수정하므로 이 버전으로 전환하는 것이 좋습니다.
ksh93e는 1996년에 출시된 오래된 제품으로 AIX 5.3 또는 6.1(둘 다 EOL AFAICT)보다 훨씬 오래되었습니다.
운이 좋다면 date
내장 기능이 ksh93 버전에 포함되어 있습니다(ksh93이 오픈 소스가 되기 전이기 때문에 ksh93e에서 사용할 수 있는지는 모르겠습니다). 이 경우 다음을 수행할 수 있습니다.
builtin date
date -d now '+the format you need: %FT%T%z for instance'
( date -d
동일한 날짜/시간 사양을 허용 printf %T
하지만 문서화되지는 않았지만 몇 가지 예를 찾을 수 있습니다.ast-open source에 포함된 테스트 파일에서) 대신에:
printf '%(format)T %<other-directive>' \
some-time-spec \
other-arg
당신은 이렇게 할 것입니다 :
builtin date
printf '%s %<other-directive>' \
"${ date -d some-time-spec +format; }" \
other-arg
Bash는 4.2(2011)에 추가되었으며, %T
이는 printf
ksh93 기능의 하위 집합을 호환되지 않는 방식으로 구현합니다.
now
ksh93과 같은 날짜 구문 분석을 지원하지 않습니다 . 유일하게 지원되는 매개변수는 다음과 같습니다.
세게 때리다 | ksh93 상당 | 설명하다 |
---|---|---|
123456789 |
#123456789 |
모든 시대의 시간 |
-1 ² |
now 또는'' |
현재 시간 |
-2 |
3번 | 쉘 시작 시간 |
zsh는 strftime
2003년에 출시된 4.1.1에 내장 날짜 형식을 추가했는데, 이는 AIX 5.3과 동기화되어야 하며 또 다른 옵션이 될 수 있습니다.
현재 시간의 형식은 ksh93의 기본 형식과 유사합니다 %T
.
$ zmodload zsh/datetime
$ strftime '%a %b %e %T %Z %Y' $EPOCHSECONDS
Mon Jul 24 15:10:15 BST 2023
strftime -r
그러나 구문 분석 시간은 4.3.3(2007)에서만 추가되었습니다 (AIX 6.1과 동시).strptime()
1 bash에서는 정수만 될 수 있지만 ksh93에서는 소수 부분( .
로케일에 관계없이 기수 문자)을 가질 수 있습니다.
² 5.0부터 bash에는 $EPOCHSECONDS
현재에도 사용할 수 있는 특수 변수(zsh에서 복사)가 있습니다.
³ 스크립트 시작 부분에는 항상 시간을 기록할 수 있지만starttime=${ printf '#%(%s.%N)T' now; }
답변2
AIX printf
명령 에 대한 %T
유효한 형식 사양이 아닙니다 . 확인하시기 바랍니다수동. 작동하는 것은 무엇입니까
a,A,d,i,o,u,x,X,f,F,e,E,g,G,c,s,b