Designação da variável de ambiente seguida do comando [duplicate]

3

O que exatamente está acontecendo no encantamento abaixo?

x=10 echo $x

Tive a impressão de que os comandos no bash podem ser encadeados usando && , || ou ; , mas não simplesmente separados por espaço em branco. O acima só funciona se o primeiro comando for uma atribuição. Por exemplo. ls ls falha, mas foo=zoo ls funciona bem.

Um caso real do estilo acima é encontrado em esta resposta SO .

    
por Marcus Junius Brutus 03.09.2014 / 19:14

3 respostas

2

Essa é uma construção sintática especial para invocar um comando com um conjunto de variáveis. Isso significa que o escopo da variável é limitado a esse comando.

Por exemplo, este comando:

x=10 sh -c 'echo $x'

É equivalente a esse outro comando:

( export x=10; sh -c 'echo $x' )

O exemplo que você deu ( x=10 echo $x ) não é um exemplo apropriado dessa construção porque a variável $x é avaliada antes que echo seja invocado.

    
por 03.09.2014 / 19:26
3

Seu comando ativa a variável x em seu valor para o comando específico que você está executando, em vez de configurá-lo no seu shell. Designação local por assim dizer.

Você pode usar isso para definir ou alterar uma variável existente para um comando.

Outros usos que usei são

http_proxy=myproxy wget http://myurl

Isso definirá um proxy específico para esse URL específico, sem alterar a configuração do proxy padrão de shells.

LANG=C sort file

Classifique seu arquivo com base em uma configuração de idioma específica, mas apenas para essa execução específica.

    
por 03.09.2014 / 19:32
2

Quando você faz:

var=value command

você passou a string var=value para o ambiente de comando. Este ambiente será usado quando o comando for executado.

De documentação do bash - Environment :

The environment for any simple command or function may be augmented temporarily by prefixing it with parameter assignments, as described in Shell Parameters. These assignment statements affect only the environment seen by that command.

Mas no seu caso, o comando não funciona. Porque:

  • Na maioria dos shells, echo é uma função interna, portanto, não será executada.
  • $x foi expandido pelo shell.
por 03.09.2014 / 19:34

Tags