El tiempo incorporado de bash acepta %E: ¿qué está pasando?

El tiempo incorporado de bash acepta %E: ¿qué está pasando?

La página de manual de bash enumera tres y sólo tres códigos de formato reconocidos por la versión integrada del shell time: %Rpara el tiempo real, %Upara el tiempo invertido en el espacio de usuario y %Spara el tiempo invertido en llamadas al sistema. Entonces el siguiente comportamiento es confuso por decir lo menos:

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

Es evidente que algo se está dejando fuera de la página de manual. El incorporado timereconoce %Ey %P. Sin embargo, verifiqué todas las demás letras mayúsculas y minúsculas y no se reconoce ninguna, excepto lcomo modificador:

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

Tengo curiosidad por entender qué está pasando aquí: ¿es realmente solo una omisión en la página de manual o hay algo extraño en mi bash? Idealmente, ¿alguien puede indicarme alguna documentación que explique esto? Estoy usando bash 4.2.48(1) en Gentoo amd64 estable, si es importante.

Respuesta1

Desde elsección de execute_cmd.cdebash-4.2+dfsgque se ocupa de 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;
  }

Entonces, de lo anterior, parece que %Esignifica lo mismo que %R: tiempo transcurrido (real).

He visto algo similar en GNU sed. Está documentado que la -ropción habilita las expresiones regulares extendidas de sed. Una característica no documentada es que -Ehace lo mismo. En este caso, el propósito es claro: proporciona compatibilidad con el indicador que BSD sedusa para expresiones regulares extendidas. Una posible razón para mantenerlo sin documentar sería que le permite a GNU la opción de usarlo -Epara otra cosa en el futuro. Las razones para permitir %ETIMEFORMAT pero mantenerlo sin documentar pueden ser similares.

información relacionada