繁体   English   中英

(=) 符号后有空格的变量赋值?

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

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

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

它有一个空间的目的是什么?

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

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

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

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

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

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

如果我们有

PWD=/bin/pwd

我们会将/bin/pwd分配给PWD

PWD= /bin/pwd

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

PWD= pwd

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

PWD=ick
echo "$PWD"

这将为脚本的其余部分分配PWD

PWD=ick pwd
echo "$PWD"

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

PWD=

这只是将空值分配给PWD

病理上,

PWD = ick

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

当 bash 或大多数其他 shell 看到以下行时:

PWD= /bin/pwd

shell 从左到右解析命令行。 它将命令行分解为两个字段: PWD=/bin/pwd因为它们由不带引号的空格分隔。 当它返回解析第一个字段 PWD= 时,它发现一个未加引号的 =,因此,shell 将其视为变量赋值/初始化。 它将PWD视为变量名,将紧跟 = 符号之后的任何字符串视为变量值。 在这种情况下,它将是一个空字符串,因为 = 符号后面只有一个空格,而未加引号的空格是 shell 中的参数分隔符。 因此, PWD值将是 ''(空字符串),顺便说一下,这只会影响其他人提到的直接命令 /bin/pwd。

如果=之前也有空格,那么shell一共会看到3个字段

PWD = /bin/pwd

Shell 将通过在 PATH 位置中搜索来将第一个字段PWD视为别名、函数或命令。 它将其他两个字段=/bin/pwd视为第一个命令或函数的参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM