Назначение переменных с пробелом после знака (=)?
В Bash присваивание значений переменным выполняется с помощью T=content
, без пробелов до или после знака равенства.
Несмотря на это, я видел следующее в сценарии оболочки PWD= /bin/pwd
с пробелом справа от знака равенства.
Какова цель этого пространства?
4 ответа
В примере PWD= /bin/pwd
переменная PWD
устанавливается на пустую строку перед выполнением команды /bin/pwd
, Изменение вступает в силу только для этой строки.
Это может быть полезно для временного изменения переменной для выполнения команды, не затрагивая исходное значение. Другой пример этого будет при использовании read
, чтобы установить другой IFS
:
IFS=, read a b c <<<"comma,separated,list"
Это устанавливает разделитель поля на запятую так, чтобы a
, b
а также c
читаются правильно. После этой строки IFS
возвращается к значению по умолчанию, поэтому остальная часть сценария не изменяется.
Возможно, на некоторых системах вывод команды pwd
зависит от значения переменной PWD
Таким образом, это предотвращает проблемы, вызванные PWD
переписывается в другом месте.
PWD= pwd
Этот синтаксис назначает пустое значение переменной PWD
на время pwd
команда.
PWD=ick
echo "$PWD"
Это назначает PWD
для оставшейся части сценария.
PWD=ick pwd
echo "$PWD"
Это назначает PWD
только на время pwd
команда; echo
будет отображать значение, которое было в силе до и после pwd
призывание.
PWD=
Это просто присваивает пустое значение PWD
,
Мы не говорим здесь о двух разных вещах.
Если бы мы имели
PWD=/bin/pwd
мы бы назначить /bin/pwd
в PWD
,
Но
PWD= /bin/pwd
означает, что мы называем /bin/pwd
с PWD
установить пустую строку. Это назначение влияет только на подпроцесс, а не на текущий.
Когда bash или большинство других оболочек видят следующую строку:
PWD= /bin/pwd
оболочка анализирует командную строку слева направо. Командная строка разбивается на два поля:
Если бы перед = тоже был пробел, то оболочка увидела бы всего 3 поля
PWD = /bin/pwd
Shell обработает первое месторождение