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 comandovar
com=23
como argumento (exceto emzsh
onde=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 executar23
comvar=
passado para seu ambiente (var
de variável de ambiente com um valor vazio). -
Comando
var = 23
,var
com=
e23
como 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=23
está apenas chamando o comandovar=23
. -
var =23
está chamando o comandovar
com=23
como argumento. -
var= 23
está chamando o comandovar=
com23
como argumento -
var = 23
está chamando o comandovar
com=
e23
como 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.