Quando você corre
PATH=abc:$PATH echo $PATH
ou, no caso mais geral,
variable=value utility
o variable é definido no ambiente do utility (mas não no ambiente atual).
No entanto, quando sua linha de comando é analisada, o valor da variável PATH é retirado do ambiente atual .
Você teria que definir a variável no ambiente onde a variável é expandida. Você pode fazer isso separando-o em duas etapas, como em
PATH=abc:$PATH; echo "$PATH"
que definiria PATH no ambiente atual e então executaria echo "$PATH" , ou definiria a variável para um shell filho, como em
PATH=abc:$PATH sh -c 'echo "$PATH"'
que definiria a variável PATH dentro de sh -c , mas não no shell atual.
No seu segundo exemplo,
PATH=/mybin:$PATH which python
O utilitário which provavelmente dirá que python é encontrado em /mybin desde que você modifique PATH em seu ambiente. Observe como PATH nunca é expandido no ambiente atual aqui, mas internamente por which .
Por acaso, which python é melhor (mais portável) escrito command -v python (consulte " Por que não usar" o que "? usar então? ").
Apenas uma reflexão rápida sobre o seu título, onde você diz " ENV variable". A variável ENV , mesmo que não seja isso que você quis dizer, é uma variável de ambiente que algumas implementações de sh (e algumas outras shells) usam. Se seu valor for o nome de um arquivo, esse arquivo será originado antes de iniciar uma sessão de shell interativa. bash tem uma variável BASH_ENV que funciona da mesma maneira, mas para shells não interativos.