/usr/bin/env
seguido do nome de um programa executa esse programa. Ele procura o nome do programa como um arquivo executável nos diretórios configurados pela variável de ambiente PATH
. É um caso especial do uso de env
: env
é seguido por algumas atribuições de variáveis de ambiente e, em seguida, um nome de programa e argumentos - aqui acontece de haver zero atribuições de variáveis.
/usr/bin/env echo …
é equivalente a /bin/echo …
, exceto pelo fato de não codificar o caminho para echo
- dependendo do sistema e do valor de PATH
, pode ser /bin/echo
, /usr/bin/echo
, /usr/xpg4/echo
, /usr/ucb/echo
, /usr/local/bin/echo
, /home/bob/bin/echo
,…
Quase todo shell tem um comando echo
embutido. Pode haver diferenças de comportamento entre o shell embutido e o comando externo. Na prática, há variações entre os comandos echo
em dois aspectos: o que acontece se o primeiro argumento começar com -
(algumas versões de echo
processam algumas opções) e como uma barra invertida é processada (algumas versões imprimem literalmente, outros o tratam como um personagem de escape). Portanto, forçar uma versão de echo
é útil ocasionalmente, quando você deseja usar esse comportamento dependente da implementação. Na maioria dos casos, é melhor usar printf
- printf
pode fazer tudo o que o echo
pode fazer e é portátil, exceto para antiguidades.
Com os argumentos passados em seu código de exemplo, a escolha de uma implementação de eco não importa. Se houver um ponto para essa loucura, seria necessário muito mais contexto para descobrir.