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