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