Gerar um processo e carregar um novo executável provavelmente leva alguns milissegundos, para que esse tipo de precisão realmente não faça sentido. Observe também que o tempo de CPU em muitos sistemas é alocado para processos por fatias de até 10ms.
Dito isto, algumas sleepimplementações levam números fracionários de segundos, e o zsh e o ksh93 podem tornar sua $SECONDSvariável especial fracionária typeset -F SECONDS.
Exemplo (zsh):
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do sleep $((1./70)); date +%s.%N; done | { head -n3;echo ..;tail -n3; }; echo $SECONDS
1350076317.374870501
1350076317.391034397
1350076317.407278461
..
1350076318.464585550
1350076318.480887660
1350076318.497133050
1.1393780000
Opa, ele flutuou. Você pode ajustar o tempo de sono com base em $SECONDS:
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do sleep $((i/70. - SECONDS)); date +%s.%N; done | { head -n3;echo ...;tail -n3; }; echo $SECONDS
1350076420.262775654
1350076420.277012997
1350076420.291302750
../..
1350076421.219682227
1350076421.234134663
1350076421.248255685
1.0020580000
Aqueles 2 milisegundos extras são, provavelmente, a ser contabilizado para executar a última sleepe datecomandos.
Observe também que o zsh possui um zselecttempo limite expresso em centésimos de segundo. E o ksh93 foi sleepincorporado (e aceita pontos flutuantes) e printfpode imprimir data / hora.
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do ((i<4 || i>67)) && printf '%(%S.%N)T\n' now; sleep $((i/70.-SECONDS)); done; echo $SECONDS
20.823349000
20.837510000
20.851663000
21.780099000
21.794254000
21.808405000
0.9992358685
Se você quiser algo mais preciso, provavelmente desejará um sistema operacional em tempo real ou um sistema operacional com recursos em tempo real e certamente não usará um shell.