A página de manual do bash 4.1 afirma(enfase adicionada)...
Comandos Simples
Um comando simples éuma sequência de atribuições de variáveis opcionais seguidas por palavras separadas por espaços em brancoe redirecionamentos, e finalizado por um operador de controle. O primeiropalavraespecifica o comando a ser executado e é passado como argumento zero. As palavras restantes são passadas como argumentos para o comando invocado.
Verificando a versão no meu sistema(NÃO corrigido para shellshock)...
# bash --version
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu) ...
No entanto, as atribuições de variáveis anteriores, sem ponto e vírgula, deveriam ser uma maneira de localizar valores de variáveis de ambiente apenas durante a invocação de um comando, mas não parecem ...
# x=123 echo $x; unset x; echo $x
bash: x: unbound variable
# x=123; echo $x; unset x; echo $x
123
bash: x: unbound variable
# x=123; echo $x | tr '1' 'a'; unset x; echo $x
a23
bash: x: unbound variable
# x=123 echo $x | tr '1' 'a'; unset x; echo $x
bash: x: unbound variable
bash: x: unbound variable
# x="123" echo "$x" | tr '1' 'a'; unset x; echo $x
bash: x: unbound variable
bash: x: unbound variable
# x="123"; echo "$x" | tr '1' 'a'; unset x; echo $x
a23
bash: x: unbound variable
Solução
Poresta resposta de outra perguntaparece que o comando deve usar deliberadamente as variáveis de ambiente de seu pai e echo
não o faz. Mas invocações de shell como bash -c
do ...
x=123 bash -c 'echo $x'; unset x; echo $x
123
bash: x: unbound variable
Recursos
Responder1
Está linha
x=123 echo $x
é avaliado na seguinte ordem:
$x
é expandido para o valor dex
noatualconcha.- O valor de
x
no ambiente do comando a ser executado é definido como 123 - A linha de comando expandida é procurada por um comando e
echo
é encontrada. echo
é executado em um ambientex
definido como 123 e$1
definido como qualquer valorx
na etapa 1.echo
gera saída$1
para a saída padrão, mas ignora os outros valores em seu ambiente.
Observe que $x
um argumento é separado daquele x
que precede o comando.