bash -c “v = value; echo $ v ”non visualizza nulla


Risposte:


18

Ci sono due shell coinvolte qui:

  • La shell chiamante, la shell interattiva da cui si sta eseguendo questo

  • La shell non di accesso, non interattiva, generata da bash -c

Ora, il problema è che, tra virgolette doppie, le variabili vengono espanse ai rispettivi valori, questo vale per qualsiasi shell.

Quindi, poiché hai usato le virgolette doppie, l'espansione della variabile si $vsta effettivamente verificando nella shell chiamante, non nella shell chiamata. Ma la dichiarazione, si v=valuesta verificando sulla shell non interattiva chiamata.

Quindi, in totale, hai la variabile definita nella shell chiamata ed espansa (in anticipo) nella shell chiamante. Poiché la variabile value non è impostata nella shell chiamante, quindi non si ottiene nulla nell'output.

Ora, per fare in modo che la definizione e l'espansione della variabile avvengano nella shell generata, usa virgolette singole o escape $:

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

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

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

1

Con le virgolette doppie $vviene sostituito dalla shell interattiva. Usa virgolette singole:

$ bash -c 'v=value;echo $v'
value
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.