bash -c “v = valor; echo $ v ”não exibe nada

9

Executando o seguinte a partir de uma tela de linha de comando:

bash -c "v=value; echo $v"

não exibe nada. Está bem? Como posso atribuir um valor a uma variável dentro desse tipo de execução?

    
por Josep Cols 14.06.2016 / 12:59

2 respostas

18

Existem dois shells envolvidos aqui:

  • O shell de chamada, o shell interativo a partir do qual você está executando este

  • O shell não-login, não interativo, gerado por bash -c

Agora, o problema é que, entre aspas duplas, as variáveis são expandidas para seus respectivos valores, isso é verdadeiro para qualquer shell.

Portanto, como você usou aspas duplas, a expansão da variável, $v , está realmente ocorrendo no shell de chamada, não no shell chamado. Mas a declaração, v=value , está ocorrendo no shell não interativo chamado.

Assim, no total, você tem a variável definida no shell chamado e expandida (antecipadamente) no shell de chamada. Como a variável value não está definida no shell de chamada, você não obtém nada na saída.

Agora, para que a definição e a expansão da variável ocorram no shell gerado, use aspas simples ou escape de $ :

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo $v"
value
    
por heemayl 14.06.2016 / 13:17
1

Com aspas duplas, $v é substituído pelo shell interativo. Use aspas simples:

$ bash -c 'v=value;echo $v'
value
    
por user448115 14.06.2016 / 13:05