Це дуже залежить від оболонки. Якщо ми розглянемо лише 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як.