Это очень зависит от оболочки. Если мы рассмотрим только 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качестве аргументов.