Qual é a diferença que explica resultados diferentes de maneiras diferentes de atribuir valores em uma linha de comando?

4

Qual é a diferença que explica os diferentes resultados desses comandos?

  1. a=2 echo $a
  2. set a=2 echo $a
  3. a=2; echo $a
  4. set a=2; echo $a
por Robert Vila 09.02.2013 / 03:21

1 resposta

7

  1. a=2 echo $a

    Resultado: gera uma linha em branco

    Razão: O Bash fornece um subconjunto de suas variáveis (o ambiente ) para cada programa que você chama com ele (você pode especificar com o export embutido). Prefixando um comando com, e. a=2 diz ao bash para adicionar $a (com valor 2 ) ao ambiente, mas

    • apenas para esse programa específico e
    • não para o conjunto de variáveis usadas pelo bash em si.

    Então, se echo fosse um programa (é na verdade, um arquivo ), ele receberia $a junto com as outras variáveis de ambiente ... mas echo não se importa sobre variáveis de ambiente - ele apenas retorna os argumentos que você fornece. Como $a não está definido como uma variável em bash , seu comando é equivalente a um echo , que emite um caractere de nova linha, fornecendo uma linha em branco.

  1. set a=2 echo $a

    Resultado: nenhuma saída

    Razão: Isso não está fazendo o que você pensa - na verdade, o comando echo não é chamado. Quando set é chamado sem opções, define o parâmetros posicionais para os argumentos que você fornece, em ordem. Você pode ver isso com alguns comandos extras:

    $ set a=2 echo $a
    $ echo 
    a=2
    $ echo 
    echo
    

    ... e echo fornecem uma linha em branco, porque você tentou definir para $a , o que não existe.

  1. a=2; echo $a

    Resultado: output 2 (finalmente!)

    Razão: Esta é a maneira correta de obter o que você deseja: você define a variável $a para 2 e, em seguida, chama echo with $a como argumento.

  1. set a=2; echo $a

    Resultado:

    • Se $a já estiver definido como 2 : saída 2
    • Se $a não estiver definido: exibirá uma linha em branco

    Razão: Espero que você possa resolver isso por si mesmo, dadas as explicações acima.

por user132994 19.02.2013 / 23:32