bash -c “v = valor; eco $ v "não exibe nada

Respostas:

18

Existem duas conchas envolvidas aqui:

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

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

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

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

Portanto, no total, você tem a variável definida no shell chamado e expandida (anteriormente) 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 fazer com que a definição e expansão da variável ocorra no shell gerado, use aspas simples ou escape $:

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

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

$ bash -c "v=value; echo \$v"
value
heemail
fonte
1

As aspas duplas $vsão substituídas pelo shell interativo. Use aspas simples:

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

fonte