Defina a variável condicionalmente na linha de comando [duplicata]

3

Eu quero definir uma variável se a minha condição for verdadeira no meu sistema Ubuntu.

Isso prova que minha declaração if está correta:

$ (if [ 1 == 1 ]; then echo "hi there"; fi);
hi there

Isso prova que posso definir variáveis:

$ a=1
$ echo $a
1

Isso mostra que definir uma variável na instrução if NÃO funciona:

$ (if [ 1 == 1 ]; then a=2; fi);
$ echo $a
1

Alguma idéia por quê? Todos os meus google research indicam que ele deve funcionar assim ...

    
por Ron 20.11.2018 / 14:33

3 respostas

10

A parte (...) do seu comando é o seu problema. Os parênteses criam um subnível separado. O subshell herdará o ambiente de seu shell pai, mas as variáveis configuradas dentro dele não reterão seus novos valores depois que a subshell sair. Isso também vale para qualquer outra alteração no ambiente dentro do subshell, incluindo a mudança de diretórios, a configuração de opções de shell, etc.

Portanto, remova o subnível:

if [ 1 = 1 ]; then a=2; fi
echo "$a"
    
por 20.11.2018 / 14:44
5

Isso prova que definir uma variável em uma sub-casca não tem efeito duradouro

(if [ 1 == 1 ]; then a=2; fi);
echo $a

produz

1

mesmo que

(a=2)
echo $a

produz

1

Solução remova os parênteses.

if [ 1 == 1 ]; then a=2; fi;
echo $a

produz

2

ou se você precisar de um sub-shell

(
  if [ 1 == 1 ]; then a=2; fi;
  echo $a
)

produz

2
    
por 20.11.2018 / 14:42
-2

Foi feito pelo método abaixo e funcionou bem

_example ~]# if [[ 1 == 1 ]]; then echo "praveen"; a=2; echo $a; fi| sed '1i================================\n output'
================================
 output

praveen
2
    
por 20.11.2018 / 19:19