Це дуже залежить від оболонки. Якщо ми розглянемо лише 4 основні сімейства оболонок (Bourne, csh, rc, fish):
Сім'я Борна
Це Bourne оболонки і все його варіанти і ksh
, bash
, ash
/ dash
, zsh
, yash
.
var=23
: це правильний синтаксис присвоєння змінної: слово, яке складається з цитованих букв, цифр або підкреслень, за якими слідує котирування, =
яке з’являється перед аргументом команди (тут воно самостійно)
var =23
, var
команда з =23
аргументом (за винятком випадків, zsh
коли =something
є спеціальний оператор, який розширюється на шлях something
команди. Тут ви, ймовірно, отримаєте помилку, оскільки 23
це навряд чи буде правильним ім'ям команди).
var= 23
: призначення, яке var=
супроводжується ім'ям команди 23
. Це призначено для виконання 23
з var=
переданим у його середовище ( var
змінною середовища з порожнім значенням).
var = 23
, var
команда з аргументом =
і 23
як. Спробуйте, echo = 23
наприклад.
Csh родина
csh
і tcsh
. Існують змінні призначення з set var = value
синтаксисом для скалярних змінних, set var = (a b)
для масивів, setenv var value
для змінних середовища, @ var=1+1
для призначення та арифметичної оцінки.
Так:
var=23
це лише виклик var=23
команди.
var =23
викликає var
команду в =23
якості аргументу.
var= 23
викликає var=
команду в 23
якості аргументу
var = 23
викликає var
команду з аргументами =
та 23
як.
Rc сім'ї
Ось rc
, es
і akanga
. У цих оболонках змінні - це масиви, а присвоєння мають var = (foo bar)
, з var = foo
короткими для var = (foo)
(масив з одним foo
елементом) та var =
короткими для var = ()
(масив без елемента, використовувати var = ''
для масиву з одним порожнім елементом).
У будь-якому випадку, пробіли (пробіл чи вкладка) навколо =
дозволені та необов’язкові. Тож у цих оболонках ці 4 команди є рівнозначними та еквівалентними var = (23)
для призначення масиву з одним елементом 23
.
Риба
В fish
, синтаксис призначення змінної є set var value1 value2
. Як і в rc
, змінні - це масиви.
Таким чином, поведінка буде такою ж, як і у випадку csh
, за винятком того fish
, що не дозволить вам запустити команду з а =
в її імені. Якщо у вас є така команда є, вам потрібно викликати його з допомогою sh
, наприклад: sh -c 'exec weird===cmd'
.
Так що всі var=23
і var= 23
дадуть вам помилку, var =23
викличуть var
команду з =23
аргументом і var = 23
будуть називати var
команду аргументами =
і 23
як.