Isso depende muito do shell. Se olharmos apenas para as 4 principais famílias de shell (Bourne, csh, rc, fish):
Família Bourne
Esse é o shell Bourne e todas as suas variantes e ksh , bash , ash / dash , zsh , yash .
-
var=23: essa é a sintaxe de atribuição de variável correta: uma palavra que consiste em letras não citadas seguidas por um=sem aspas que aparece antes de um argumento de comando (aqui está por conta própria) -
var =23, o comandovarcom=23como argumento (exceto emzshonde=somethingé um operador especial que se expande para o caminho do comandosomething. Aqui, você provavelmente obteria um erro como23é improvável que seja um nome de comando válido). -
var= 23: uma atribuiçãovar=seguido por um nome de comando23. Isso significa executar23comvar=passado para seu ambiente (varde variável de ambiente com um valor vazio). -
Comando
var = 23,varcom=e23como argumento. Experimente comecho = 23, por exemplo.
Família Csh
csh e tcsh . Atribuições variáveis existem com a sintaxe set var = value para variáveis escalares, set var = (a b) para matrizes, setenv var value para variáveis de ambiente, @ var=1+1 para atribuição e avaliação aritmética.
Então:
-
var=23está apenas chamando o comandovar=23. -
var =23está chamando o comandovarcom=23como argumento. -
var= 23está chamando o comandovar=com23como argumento -
var = 23está chamando o comandovarcom=e23como argumentos.
Família Rc
Isso é rc , es e akanga . Nesses shells, as variáveis são arrays e atribuições com var = (foo bar) , com var = foo sendo curto para var = (foo) (um array com um foo element) e var = short para var = () (array sem elemento, use var = '' para um array com um elemento vazio).
Em qualquer caso, os espaços em branco (espaço ou tabulação) em torno de = são permitidos e opcionais. Então, nesses shells, esses 4 comandos são equivalentes e equivalentes a var = (23) para atribuir um array com um elemento sendo 23 .
Peixe
Em fish , a sintaxe de atribuição de variáveis é set var value1 value2 . Como em rc , as variáveis são matrizes.
Assim, o comportamento seria o mesmo que com csh , exceto que fish não permite executar um comando com = em seu nome. Se você tiver esse comando, precisará invocá-lo via env , por exemplo: env weird===cmd .
Assim, todos os var=23 e var= 23 darão um erro, var =23 chamará o comando var com =23 como argumento e var = 23 chamará o comando var com = e 23 como argumentos.