Em um sentido, usar env pode ser considerado "portátil" porque o caminho para bash não é relevante ( /bin/bash , /usr/bin/bash , /usr/local/bin/bash , ~/bin/bash ou qualquer caminho) porque é especificado no ambiente. Dessa forma, um autor de script poderia facilitar a execução de seu script em muitos sistemas diferentes.
Em outro sentido, usar env para localizar bash ou qualquer outro interpretador de shell ou de comando é considerado um risco de segurança, pois um binário desconhecido (malware) pode ser usado para executar o script. Nestes ambientes, e às vezes pela política gerencial, o caminho é especificado explicitamente com um caminho completo: #!/bin/bash .
Em geral, use env , a menos que você saiba que está escrevendo em um desses ambientes que analisa os mínimos detalhes de risco.
Quando o Ubuntu começou a usar dash , em 2011, muitos scripts foram quebrados por essa ação. Houve discussão sobre isso no askubuntu.com. A maioria dos scripts foi escrita em #!/bin/sh , que era um link para /bin/bash . O consenso foi este: o roteirista é responsável por especificar o intérprete. Portanto, se seu script sempre deve ser chamado com BASH, especifique-o no ambiente. Isso evita que você tenha que adivinhar o caminho, o que é diferente em vários sistemas Unix / Linux. Além disso, funcionará se amanhã /bin/sh se tornar um link para algum outro shell como /bin/newsh .
Outra diferença é que o método env não permite a passagem de argumentos para o interpretador.