-
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 valor2
) 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 ... masecho
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 embash
, seu comando é equivalente a umecho
, que emite um caractere de nova linha, fornecendo uma linha em branco.
-
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. Quandoset
é 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 definirpara
$a
, o que não existe.
-
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
para2
e, em seguida, chamaecho
with$a
como argumento.
-
set a=2; echo $a
Resultado:
- Se
$a
já estiver definido como2
: saída2
- 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.
- Se