Isso é equivalente a:
( export someVariable=something; command )
Isso torna someVariable
uma variável de ambiente, com o valor atribuído, mas apenas para o comando que está sendo executado.
Aqui estão as partes relevantes do manual bash
:
Simple Commands
A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator. The first word specifies the command to be executed, and is passed as argument zero. The remaining words are passed as arguments to the invoked command.
(...)
Simple Command Expansion
If no command name results [from command expansion], the variable assignments affect the current shell environment. Otherwise, the variables are added to the environment of the executed command and do not affect the current shell environment.
Observação: tenha em mente que isso não é específico de bash
, mas especificado por POSIX .
Editar - Resumiu a discussão a partir dos comentários na resposta
O motivo BAZ=JAKE echo $BAZ
, não imprime O JAKE é porque a substituição de variáveis é feita antes de qualquer outra coisa. Se você ignorar a substituição de variável, isso se comportará como esperado:
$ echo_baz() { echo "[$BAZ]"; }
$ BAZ=Jake echo_baz
[Jake]
$ echo_baz
[]