Como declarar uma variável dentro do bash -c

0

Não consigo descobrir como declarar uma variável dentro do comando bash -c .

bash -c "var=3; echo $var"
    
por deathangel908 13.05.2018 / 11:17

2 respostas

1

Vamos ver o que realmente acontece aqui:

$ set -x
$ bash -c "var=3; echo $var"
+ bash -c 'var=3; echo '

Com set -x você obtém um rastreamento de quais comandos são realmente executados (use set +x para desativá-lo). Aqui vemos que a variável $var é expandida para uma string vazia antes de o child bash -c shell ser executado.

Isso se deve à citação dupla do argumento para bash -c , que solicitará que o shell atual faça uma expansão variável dentro da string. Como a variável var é indefinida ou vazia no shell atual, sua expansão é a string vazia.

Para proteger uma string de "interferência" pelo shell, use aspas simples:

$ bash -c 'var=3; echo $var'
+ bash -c 'var=3; echo $var'
3

... ou escape do $ (IMO não é tão bom):

$ bash -c "var=3; echo \$var"
+ bash -c 'var=3; echo $var'
3
    
por 13.05.2018 / 11:30
1

Porque $? e $a são avaliados no shell de chamada.

bash -c 'cat /tmp/lol ; a=$?; if (( $a == 0)); then echo "2"; fi;'
    
por 13.05.2018 / 11:18

Tags