Seu comando time sleep 1 ${x}
executa efetivamente time sleep 1 1
e, em seguida, time sleep 1 2
.
O comando bash
builtin time
pega esses dois valores e dorme para os dois.
Portanto, sleep 1 1
é o mesmo que sleep 2
e sleep 1 2
é o mesmo que sleep 3
.
Com o comando time
incorporado, as coisas não funcionam da mesma maneira que o normal e, portanto, time sleep 2>...
é interpretado mais próximo de time ( sleep 2>...)
.
Então, ao invés disso
( time sleep 1 ) 2>&1 | grep real