在Bash中,使用T=content
为变量赋值,在等号之前或之后没有空格。
尽管我在shell脚本PWD= /bin/pwd
中看到以下内容,其中包含等号右侧的空格。
它的目的是什么??
答案 0 :(得分:7)
在示例PWD= /bin/pwd
中,变量PWD
在执行命令/bin/pwd
之前设置为空字符串。该更改仅对该行生效。
这对于在运行命令时临时更改变量非常有用,而不会影响原始值。另一个例子是使用read
时设置不同的IFS
:
IFS=, read a b c <<<"comma,separated,list"
这会将字段分隔符设置为逗号,以便正确读取a
,b
和c
。在此行之后,IFS
将返回默认值,因此脚本的其余部分不会受到影响。
也许在某些系统上,命令pwd
的输出受变量PWD
的值影响,因此这样做可以防止PWD
在其他地方被覆盖导致的问题。
答案 1 :(得分:2)
PWD= pwd
此语法在PWD
命令的持续时间内将空值分配给变量pwd
。
PWD=ick
echo "$PWD"
这会为脚本的其余部分指定PWD
。
PWD=ick pwd
echo "$PWD"
仅在PWD
命令的持续时间内分配pwd
; echo
将回显pwd
调用之前和之后生效的值。
PWD=
这只是将空值分配给PWD
。
答案 2 :(得分:2)
我们不是在谈论两件不同的事情。
如果我们有
PWD=/bin/pwd
我们会将/bin/pwd
分配给PWD
。
但是
PWD= /bin/pwd
表示我们调用/bin/pwd
并将PWD
设置为空字符串。此分配仅影响子流程,而不影响当前流程。
答案 3 :(得分:0)
当 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
视为第一个命令或函数的参数