Assegnazione di variabili con lo spazio dopo il segno (=)?

In Bash, l’assegnazione dei valori alle variabili viene eseguita utilizzando T=content , senza spazi prima o dopo il segno di uguale.

Nonostante ciò ho visto quanto segue in uno script di shell PWD= /bin/pwd contiene uno spazio sul lato destro del segno di uguale.

Qual è lo scopo di avere uno spazio?

Nell’esempio PWD= /bin/pwd , la variabile PWD è impostata sulla stringa vuota prima di eseguire il comando /bin/pwd . La modifica ha effetto solo per quella linea.

Questo può essere utile per apportare una modifica temporanea a una variabile ai fini dell’esecuzione di un comando, senza influire sul valore originale. Un altro esempio di questo sarebbe quando si usa read , per impostare un IFS diverso:

 IFS=, read abc <<<"comma,separated,list" 

Questo imposta il separatore di campo su una virgola in modo che a , c siano letti correttamente. Dopo questa riga, IFS ritorna al valore predefinito, quindi il resto dello script non è interessato.

Forse su alcuni sistemi, l'output del comando pwd è influenzato dal valore della variabile PWD , così facendo si evita che i problemi causati da PWD vengano sovrascritti altrove.

Non stiamo parlando di due cose diverse qui.

Se lo avessimo

 PWD=/bin/pwd 

assegneremmo /bin/pwd a PWD .

Ma

 PWD= /bin/pwd 

significa che chiamiamo /bin/pwd con PWD impostato sulla stringa vuota. Questa assegnazione ha effetto solo sul processo secondario, non su quello corrente.

 PWD= pwd 

Questa syntax assegna il valore vuoto alla variabile PWD per la durata del comando pwd .

 PWD=ick echo "$PWD" 

Questo assegna PWD per il resto dello script.

 PWD=ick pwd echo "$PWD" 

Questo assegna PWD solo per la durata del comando pwd ; l’ echo farà eco al valore che era in effetto prima e dopo l’invocazione pwd .

 PWD= 

Questo semplicemente assegna il valore vuoto a PWD .