关于bash:在(=)符号后用空格分配变量?

Assignment of variables with space after the (=) sign?

在Bash中,使用T=content为变量赋值,在等号之前或之后没有空格。

尽管我在shell脚本PWD= /bin/pwd中看到了以下内容,其中包含等号右侧的空格。

它有什么用途?


在示例PWD= /bin/pwd中,在执行命令/bin/pwd之前将变量PWD设置为空字符串。更改仅对该行生效。

这对于在运行命令时临时更改变量非常有用,而不会影响原始值。另一个例子是当使用read时,设置不同的IFS

1
IFS=, read a b c <<<"comma,separated,list"

这会将字段分隔符设置为逗号,以便正确读取abc。在此行之后,IFS将返回默认值,因此脚本的其余部分不会受到影响。

也许在某些系统上,命令PWD的输出受变量PWD的值的影响,因此这样做可以防止由于PWD被其他地方覆盖而导致的问题。


我们这里不是在谈论两件不同的事情。

如果我们有

1
PWD=/bin/pwd

我们将/bin/pwd分配给PWD

1
PWD= /bin/pwd

意味着我们调用/bin/pwd并将PWD设置为空字符串。此分配仅影响子流程,而不影响当前流程。


1
PWD= pwd

此语法在PWD命令的持续时间内将空值分配给变量PWD

1
2
PWD=ick
echo"$PWD"

这为脚本的其余部分指定了PWD

1
2
PWD=ick pwd
echo"$PWD"

这仅在PWD命令的持续时间内分配PWD; echo将回显PWD调用之前和之后生效的值。

1
PWD=

这只是将空值赋给PWD

病理上,

1
PWD = ick

尝试使用参数=ick运行命令PWD