Назначение переменных с пробелом после знака (=)?

В 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, установленным в пустую строку. Это назначение влияет только на подпроцесс, а не на текущий.