在(=)符号后用空格分配变量?

kan*_*eda 12 bash shell sh

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

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

它有什么用途?

tri*_*eee 10

PWD= pwd
Run Code Online (Sandbox Code Playgroud)

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

PWD=ick
echo "$PWD"
Run Code Online (Sandbox Code Playgroud)

这分配PWD给脚本的其余部分。

PWD=ick pwd
echo "$PWD"
Run Code Online (Sandbox Code Playgroud)

PWD仅在命令执行期间进行分配pwd;将echo回显调用之前和之后有效的值pwd

PWD=
Run Code Online (Sandbox Code Playgroud)

这只是将空值分配给PWD

从病理学上来说,

PWD = ick
Run Code Online (Sandbox Code Playgroud)

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

  • 不管“PWD”的值如何,Bash 的“pwd”命令都会报告当前目录。 (3认同)

Tom*_*ech 9

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

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

IFS=, read a b c <<<"comma,separated,list"
Run Code Online (Sandbox Code Playgroud)

这将设置字段分隔符为逗号,这样a,bc被正确读取.在此行之后,IFS返回默认值,因此脚本的其余部分不受影响.

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

  • PWD没有*未设置.它显式设置为空字符串.它们是有区别的.例如,考虑`$ {FOO-bar}'和`$ {FOO:-bar}`之间的区别. (2认同)

glg*_*lgl 5

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

如果我们有

PWD=/bin/pwd
Run Code Online (Sandbox Code Playgroud)

我们将分配/bin/pwdPWD.

PWD= /bin/pwd
Run Code Online (Sandbox Code Playgroud)

意味着我们调用/bin/pwdsetPWD为空字符串。该分配仅影响子进程,而不影响当前子进程。