I need to measure the running time of an application, so I'm messing with TIMEFORMAT in order to print short format with the maximum precision available.
From the Bash Refence Manual:
TIMEFORMAT
The value of this parameter is used as a format string specifying how the timing information for pipelines prefixed with the time reserved word should be displayed. The ‘%’ character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as follows; the braces denote optional portions.
%% A literal ‘%’.
%[p][l]R The elapsed time in seconds.
%[p][l]U The number of CPU seconds spent in user mode.
%[p][l]S The number of CPU seconds spent in system mode.
%P The CPU percentage, computed as (%U + %S) / %R.
The optional p is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. At most three places after the decimal point may be specified; values of p greater than 3 are changed to 3. If p is not specified, the value 3 is used.
The optional l specifies a longer format, including minutes, of the form MMmSS.FFs. The value of p determines whether or not the fraction is included.
If this variable is not set, Bash acts as if it had the value
$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
If the value is null, no timing information is displayed. A trailing newline is added when the format string is displayed.
But, whenever I set TIMEFORMAT the tabs and new lines are not expanding:
rafael@lip ~/time-tests $ time ls
real 0m0.099s
user 0m0.000s
sys 0m0.002s
rafael@lip ~/time-tests $ TIMEFORMAT='\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
rafael@lip ~/time-tests $ time ls
\nreal\t0m0.002s\nuser\t0m0.000s\nsys\t0m0.002s
Why? and how to solve it?