bashの組み込み時間は%Eを受け入れます。何が起こっているのでしょうか?

bashの組み込み時間は%Eを受け入れます。何が起こっているのでしょうか?

bashのマニュアルページには、組み込みのシェルバージョンで認識される3つのフォーマットコード(timeリアルタイム%R%Uユーザースペースで費やされた時間、%Sシステムコールに費やされた時間)のみがリストされています。したがって、次の動作はいくら言っても混乱しています。

$ type time
time is a shell keyword
$ TIMEFORMAT="%E %P"
$ time sleep 1
1.002 0.00

マンページに何か抜けたようです。組み込み関数はとをtime識別します。しかし、他のすべての大文字と小文字を確認しましたが、修飾子以外には何も認識されませんでした。%E%Pl

$ TIMEFORMAT="%lE %lS %lU %lR"
$ time sleep 1
0m1.001s 0m0.000s 0m0.000s 0m1.001s

私はここで何が起こっているのか知りたいです。これは実際にはマニュアルページにありませんか、それとも私のbashに何か奇妙なことがありますか?理想的には、誰でもこれを説明する文書を教えてもらえますか?重要な場合は、Gentoo amd64 stableでbash 4.2.48(1)を使用しています。

ベストアンサー1

~からexecute_cmd.c~の一部bash-4.2+dfsg関連TIMEFORMAT:

if (*s == 'R' || *s == 'E')
  len = mkfmt (ts, prec, lng, rs, rsf);
else if (*s == 'U')
  len = mkfmt (ts, prec, lng, us, usf);
else if (*s == 'S')
  len = mkfmt (ts, prec, lng, ss, ssf);
else
  {
    internal_error (_("TIMEFORMAT: `%c': invalid format character"), *s);
    free (str);
    return;
  }

したがって、上から見ると、これは経過%E(リアルタイム)時間と同じように見えます。%R

私はGNUで同様のものを見たことがありますsed。この-rオプションは、sedの拡張正規表現を有効にするものとして文書化されています。文書化されていない機能も-E同じ機能を実行します。この場合、目的は明らかです。これはsed正規表現拡張のためのBSDフラグとの互換性を提供します。文書化しない理由の1つは、GNUが-E後で他の目的に選択的に使用できるようにすることです。 TIMEFORMATを許可し%Eてもログに記録しない理由は似ている可能性があります。

おすすめ記事