複数の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
AIXprintf
コマンドの%T
有効なフォーマット仕様ではありません。確認してください手動。動作するものは何ですか
a、A、d、i、o、u、x、X、f、F、e、E、g、G、c、s、b