Isso depende muito da concha. Se olharmos apenas para as quatro principais famílias de cascas (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 correta de atribuição de variável: uma palavra que consiste em letras, dígitos ou sublinhados sem aspas, seguida por uma sem aspas =
que aparece antes de um argumento de comando (aqui está por si só)
var =23
, o var
comando com =23
o argumento as (exceto zsh
onde =something
está um operador especial que se expande para o caminho do something
comando. Aqui, é provável que você receba um erro, pois 23
é improvável que seja um nome de comando válido).
var= 23
: uma atribuição var=
seguida por um nome de comando 23
. Isso deve ser executado 23
com var=
passado para seu ambiente ( var
variável de ambiente com um valor vazio).
var = 23
, var
comando com =
e 23
como argumento. Tente com echo = 23
por exemplo.
Família Csh
csh
e tcsh
. Designações de variáveis que existem com a set var = value
sintaxe 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 invocando o var=23
comando.
var =23
está chamando o var
comando com =23
como argumento.
var= 23
está chamando o var=
comando com 23
como argumento
var = 23
está chamando o var
comando com =
e 23
como argumentos.
Família rc
Isso é rc
, es
e akanga
. Nessas shells, as variáveis são matrizes e as atribuições são var = (foo bar)
, com var = foo
abreviação de var = (foo)
(uma matriz com um foo
elemento) e var =
abreviação de var = ()
(matriz sem elemento, use var = ''
para uma matriz com um elemento vazio).
Em qualquer caso, espaços em branco (espaço ou tabulação) ao redor =
são permitidos e opcionais. Portanto, nesses shells esses 4 comandos são equivalentes e equivalentes var = (23)
a atribuir uma matriz com um elemento 23
.
Peixe
Em fish
, a sintaxe da atribuição de variável é set var value1 value2
. Como em rc
, variáveis são matrizes.
Portanto, o comportamento seria o mesmo que com csh
, exceto que fish
não permitirá que você execute um comando com a =
em seu nome. Se você tem tal comando de um, você precisa chamá-lo através de sh
, por exemplo: sh -c 'exec weird===cmd'
.
Então, tudo var=23
e var= 23
lhe dará um erro, var =23
chamará o var
comando com =23
como argumento e var = 23
chamará o var
comando com =
e 23
como argumentos.