date +%s.%N
fornecerá, por exemplo, 1364391019.877418748
. O% N é o
número de nanossegundos decorridos no segundo atual. Observe que são 9 dígitos
e por padrão a data irá preencher isto com zeros se for menor que 100000000. Isto é realmente um problema se nós queremos fazer matemática com o número, porque bash trata os números com um zero inicial como octal . Esse preenchimento pode ser desativado usando um hífen na especificação de campo, portanto:
echo $(('date +%s'*1000+'date +%-N'/1000000))
ingenuamente lhe daria milissegundos desde a época.
No entanto , como Stephane Chazelas aponta no comentário abaixo, são duas chamadas date
diferentes que renderão dois momentos ligeiramente diferentes. E se
o segundo rolou entre eles, o cálculo será um
todo segundo fora. Então:
echo $(($(date +'%s * 1000 + %-N / 1000000')))