To bardzo zależy od powłoki. Jeśli spojrzymy tylko na 4 główne rodziny skorup (Bourne, csh, rc, fish):
Rodzina Bourne
To jest Bourne shell i wszystkie jego odmiany i ksh
, bash
, ash
/ dash
, zsh
, yash
.
var=23
: to jest poprawna składnia przypisania zmiennych: słowo składające się z niecytowanych liter, cyfr lub znaków podkreślenia, po których następuje cudzysłow, =
który pojawia się przed argumentem polecenia (tutaj jest sam)
var =23
, var
polecenie z =23
argumentem jako (z wyjątkiem zsh
gdzie gdzie =something
jest specjalny operator, który rozwija się do ścieżki something
polecenia. W tym przypadku prawdopodobnie wystąpi błąd, ponieważ 23
prawdopodobnie nie będzie to poprawna nazwa polecenia).
var= 23
: przypisanie, var=
po którym następuje nazwa polecenia 23
. To ma być wykonane 23
z var=
przekazanym do jego środowiska ( var
zmienna środowiskowa z pustą wartością).
var = 23
, var
komenda z argumentem =
i 23
jako argument. Spróbuj echo = 23
na przykład.
Rodzina Csh
csh
a tcsh
. Istnieją przypisania zmiennych ze set var = value
składnią dla zmiennych skalarnych, set var = (a b)
tablic, setenv var value
zmiennych środowiskowych,@ var=1+1
dla przypisania i oceny arytmetycznej.
Więc:
var=23
po prostu wywołuje var=23
polecenie.
var =23
wywołuje var
polecenie =23
jako argument.
var= 23
wywołuje var=
polecenie 23
jako argument
var = 23
to powołując się na var
komendę =
i 23
jako argumenty.
Rodzina RC
To rc
, es
i akanga
. W tych powłokach zmienne są tablicami, a przypisania są za pomocą var = (foo bar)
, przy var = foo
czym skrót dla var = (foo)
(tablica z jednym foo
elementem) i var =
skrót dla var = ()
(tablica bez elementu, należy użyć var = ''
dla tablicy z jednym pustym elementem).
W każdym razie puste miejsca (spacja lub tabulator) wokół =
są dozwolone i opcjonalne. Więc w tych powłokach te 4 polecenia są równoważne i równoważne var = (23)
do przypisania tablicy z jednym elementem 23
.
Ryba
W fish
składnia przypisania zmiennej to set var value1 value2
. Podobnie jak w rc
, zmienne są tablicami.
Zachowanie byłoby więc takie samo jak w przypadku csh
, ale fish
nie pozwala na uruchomienie polecenia z =
jego nazwą. Jeśli masz takie polecenie jest, trzeba powołać go poprzez sh
na przykład: sh -c 'exec weird===cmd'
.
Więc wszystko var=23
i var= 23
daje błąd, var =23
wywoła var
komendę =23
jako argument i var = 23
wywoła var
komendę =
i 23
jako argumenty.