Jaka jest różnica między przypisaniami poniżej zmiennych?
var=23
var =23
var= 23
var = 23
Czy jest jakaś różnica w przestrzeni wokół operatora przypisania?
shell
variable
assignment
ajay
źródło
źródło
var
wówczasvar =23
przejdzie=23
do var, avar = 23
przejdzie=
i23
var. Albo, jeśli masz polecenie nazywavar=
następnievar= 23
przejdzie23
do poleceniavar=
.bash
, co robi dokładnie to samo, cosh
we wszystkich czterech przypadkach.Odpowiedzi:
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ątkiemzsh
gdzie gdzie=something
jest specjalny operator, który rozwija się do ścieżkisomething
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 polecenia23
. To ma być wykonane23
zvar=
przekazanym do jego środowiska (var
zmienna środowiskowa z pustą wartością).var = 23
,var
komenda z argumentem=
i23
jako argument. Spróbujecho = 23
na przykład.Rodzina Csh
csh
atcsh
. Istnieją przypisania zmiennych zeset 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łujevar=23
polecenie.var =23
wywołujevar
polecenie=23
jako argument.var= 23
wywołujevar=
polecenie23
jako argumentvar = 23
to powołując się navar
komendę=
i23
jako argumenty.Rodzina RC
To
rc
,es
iakanga
. W tych powłokach zmienne są tablicami, a przypisania są za pomocąvar = (foo bar)
, przyvar = foo
czym skrót dlavar = (foo)
(tablica z jednymfoo
elementem) ivar =
skrót dlavar = ()
(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żnevar = (23)
do przypisania tablicy z jednym elementem23
.Ryba
W
fish
składnia przypisania zmiennej toset var value1 value2
. Podobnie jak wrc
, zmienne są tablicami.Zachowanie byłoby więc takie samo jak w przypadku
csh
, alefish
nie pozwala na uruchomienie polecenia z=
jego nazwą. Jeśli masz takie polecenie jest, trzeba powołać go poprzezsh
na przykład:sh -c 'exec weird===cmd'
.Więc wszystko
var=23
ivar= 23
daje błąd,var =23
wywołavar
komendę=23
jako argument ivar = 23
wywołavar
komendę=
i23
jako argumenty.źródło
var=23
przypisuje 23 do zmiennejvar
.var =23
próbuje uruchomić polecenie (lub alias lub funkcję)var
z argumentem=23
var = 23
to samo, ale argumenty=
i23
var= 23
ustawiavar
zmienną środowiskową na pusty ciąg, a następnie uruchamia polecenie23
Tak, shell jest dziwny jako język programowania. Ma to jednak sens jako powłoka do użytku interaktywnego, w którym spacje oddzielają polecenia i argumenty. Większość „znaków specjalnych” (
=
w tym przypadku) ma specjalne znaczenie tylko w określonych pozycjach, aby umożliwić prawie dowolne argumenty poleceń. Patrz powyższe interpretacje.źródło
var=23
to poprawna składnia do przypisywania wartości zmiennej.var =23
jest uważany za polecenievar
z=23
opcją / argumentem poleceniavar
(chociaż poprawna / standardowa składnia argumentu / opcji to-option
lub--option
)var= 23
nie przydzieli niczego,var
ponieważ białe znaki przerywają proces przypisywania i23
będą traktowane jako kolejne polecenie. Obejściem tego problemu jestvar=\ 23
lubvar=' 23'
przechowywanie białych znaków.var = 23
ma podobny skutek jak omówiono w 2 ND przypadku.W rzeczywistości tego rodzaju wykorzystanie przestrzeni wokół
=
jest zwykle używane w warunkach testowych wewnątrz[[ ]]
. Przykład dla Bash:A przecież zachowanie białej przestrzeni
=
zależy od powłoki i języków programowania.źródło