Встроенная функция времени bash принимает %E — что происходит?

Встроенная функция времени bash принимает %E — что происходит?

Страница руководства bash содержит три и только три форматных кода, распознаваемых встроенной версией оболочки time: %Rдля реального времени, %Uдля времени, проведенного в пользовательском пространстве, и %Sдля времени, проведенного в системных вызовах. Поэтому следующее поведение, мягко говоря, сбивает с толку:

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

Очевидно, что-то упущено из страницы руководства. Встроенная функция timeраспознает %Eи %P. Однако я проверил все остальные заглавные и строчные буквы, и ни одна из них не распознается, за исключением lмодификатора:

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

Мне интересно понять, что здесь происходит - это действительно просто упущение в man-странице или что-то странное в моем bash? В идеале, может ли кто-нибудь указать мне на документацию, которая это объясняет? Я использую bash 4.2.48(1) на Gentoo amd64 stable, если это имеет значение.

решение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делает то же самое. В этом случае цель ясна: это обеспечивает совместимость с флагом, который BSD sedиспользует для расширенных регулярных выражений. Одной из возможных причин оставить ее недокументированной может быть то, что она позволяет GNU использовать опцию -Eдля чего-то еще в будущем. Причины разрешить %ETIMEFORMAT, но оставить ее недокументированной, могут быть похожими.

Связанный контент