Executando o seguinte em uma tela de linha de comando:
bash -c "v=value; echo $v"
não exibe nada. Está certo? Como posso atribuir um valor a uma variável dentro desse tipo de execução?
bash
environment-variables
Josep Cols
fonte
fonte
Respostas:
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,
$v
na verdade está ocorrendo no shell de chamada, não no shell chamado. Mas a declaraçãov=value
está 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
$
:fonte
As aspas duplas
$v
são substituídas pelo shell interativo. Use aspas simples:fonte