O comando time
em seu pipeline não é o binário /usr/bin/time
, mas o bash time
integrado. Compare man time
com help time
. O erro que você vê é que o bash não consegue analisar o argumento de time
. Isso deve estar presente ou ser uma nova linha. É uma nova linha no seu primeiro exemplo, mas ausente no segundo.
Por outro lado, se você fosse executar
ls;date;'time'
ou
ls;'time';date
onde as aspas em torno de 'time'
revogam seu status como uma palavra reservada, então o bash não tem problemas em analisar a linha. Agora, ele analisa três comandos em uma lista, que será executada em sequência, e /usr/bin/time
relatará um erro de uso em ambos os casos.
Adendo
Observou-se que, embora time ; date
produza um erro, time ; ; date
não. A explicação provável é que time ;
é interpretado por bash como equivalente a time <newline>
. A expressão time ; ; date
é então analisada como a lista de time ;
e date
.
Isso é consistente com a observação de que time ;
e time ; ;
são legais também, sendo o segundo analisado como a lista única contendo time ;
seguido do ponto-e-vírgula opcional permitido após as listas.
Portanto, outra maneira de explicar por que time ; date
gera o erro bash: syntax error near unexpected token 'date'
é que time
consome o ponto-e-vírgula separando-o de date
. Só pode fazer isso porque time
é uma palavra reservada.