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
%P
l
$ 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 플래그와의 호환성을 제공합니다. 문서화하지 않는 한 가지 가능한 이유는 GNU가 -E
나중에 다른 목적으로 선택적으로 사용할 수 있도록 허용하기 때문입니다. TIMEFORMAT을 허용 %E
하지만 로깅하지 않는 이유는 비슷할 수 있습니다.