Dipende molto dalla shell. Se guardiamo solo alle 4 principali famiglie di conchiglie (Bourne, csh, rc, fish):
Famiglia Bourne
Cioè la shell Bourne e tutte le sue varianti e ksh
, bash
, ash
/ dash
, zsh
, yash
.
var=23
: questa è la sintassi di assegnazione variabile corretta: una parola che consiste di lettere, cifre o caratteri di sottolineatura seguiti da un non quotato =
che appare prima di un argomento di comando (qui è da solo)
var =23
, il var
comando con =23
come argomento (tranne in zsh
cui =something
è presente un operatore speciale che si espande nel percorso del something
comando. Qui, è probabile che 23
venga visualizzato un errore poiché è improbabile che sia un nome di comando valido).
var= 23
: un compito var=
seguito da un nome di comando 23
. Questo è pensato per essere eseguito 23
con var=
passato al suo ambiente ( var
variabile d'ambiente con un valore vuoto).
var = 23
, var
comando con =
e 23
come argomento. Prova con echo = 23
per esempio.
Famiglia csh
csh
e tcsh
. Ci sono assegnazioni di variabili con la set var = value
sintassi per variabili scalari, set var = (a b)
per array, setenv var value
per variabili di ambiente, @ var=1+1
per assegnazione e valutazione aritmetica.
Così:
var=23
sta solo invocando il var=23
comando.
var =23
sta invocando il var
comando con =23
come argomento.
var= 23
sta invocando il var=
comando con 23
come argomento
var = 23
sta invocando il var
comando con =
e 23
come argomenti.
Famiglia rc
Questo è rc
, es
e akanga
. In quelle shell, le variabili sono array e le assegnazioni sono var = (foo bar)
, con var = foo
abbreviazione di var = (foo)
(un array con un foo
elemento) e var =
abbreviazione di var = ()
(array senza elemento, utilizzare var = ''
per un array con un elemento vuoto).
In ogni caso, gli spazi vuoti (spazio o scheda) =
sono consentiti e facoltativi. Quindi in quelle shell quei 4 comandi sono equivalenti ed equivalenti var = (23)
ad assegnare un array con un solo elemento 23
.
Pesce
In fish
, la sintassi dell'assegnazione delle variabili è set var value1 value2
. Come in rc
, le variabili sono array.
Quindi il comportamento sarebbe lo stesso di csh
, tranne per il fatto che fish
non ti permetterà di eseguire un comando con a =
nel suo nome. Se si dispone di tale comando di una, è necessario richiamare tramite sh
, per esempio: sh -c 'exec weird===cmd'
.
Quindi tutto var=23
e var= 23
ti darà un errore, var =23
chiamerà il var
comando con =23
come argomento e var = 23
chiamerà il var
comando con =
e 23
come argomenti.