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동일한 기능을 수행한다는 것입니다. 이 경우 목적은 분명합니다. 이는 BSD가 sed확장 정규식에 사용하는 플래그와의 호환성을 제공합니다 . 이를 문서화하지 않은 채 유지하는 한 가지 가능한 이유는 GNU가 -E미래에 다른 것에 사용할 수 있는 옵션을 허용하기 때문입니다 . %ETIMEFORMAT을 허용하지만 문서화하지 않은 채 유지하는 이유 는 비슷할 수 있습니다.

관련 정보