在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= /bin/pwd,PWD在执行命令之前将变量设置为空字符串/bin/pwd.更改仅对该行生效.
这对于在运行命令时临时更改变量非常有用,而不会影响原始值.另一个例子是使用时read,设置不同的IFS:
IFS=, read a b c <<<"comma,separated,list"
Run Code Online (Sandbox Code Playgroud)
这将设置字段分隔符为逗号,这样a,b和c被正确读取.在此行之后,IFS返回默认值,因此脚本的其余部分不受影响.
也许在某些系统上,命令的输出pwd受变量值的影响PWD,因此这样做可以防止因PWD在其他地方被覆盖而导致的问题.
我们在这里谈论的不是两件不同的事情。
如果我们有
PWD=/bin/pwd
Run Code Online (Sandbox Code Playgroud)
我们将分配/bin/pwd给PWD.
但
PWD= /bin/pwd
Run Code Online (Sandbox Code Playgroud)
意味着我们调用/bin/pwdsetPWD为空字符串。该分配仅影响子进程,而不影响当前子进程。