什么是空白在bash中实际意味着什么?

Tep*_*har 5 linux bash

我有这样的事情:

projectName= echo $tempPBXProjFilePath | sed "s/.*\/\(.*\)\.xcodeproj.*$/\1/g";
Run Code Online (Sandbox Code Playgroud)

我想从中提取子串$tempPBXProjFilePath.这是正确的.但是,如果我这样写:

projectName=echo $tempPBXProjFilePath | sed "s/.*\/\(.*\)\.xcodeproj.*$/\1/g";
Run Code Online (Sandbox Code Playgroud)

这是错误的.区别在于变量之后的空格.

我知道变量后面没有空格.但是等号后的空白是什么意思.空白有什么特别的意义吗?

Rus*_*nov 3

变量赋值

变量赋值的语法是:

name=value
Run Code Online (Sandbox Code Playgroud)

请注意,标志周围没有空格=。如果值包含空格或特殊字符,则应使用单引号引起来:

name='value with spaces or special characters'
Run Code Online (Sandbox Code Playgroud)

或用双引号进行变量扩展

name="stringA $variable stringB"
Run Code Online (Sandbox Code Playgroud)

如果缺少引号,则值部分中的第二个单词将被解释为命令。实际上,这是一种将环境变量传递给命令的方法(见下文)。

如果该值缺失,则会创建一个具有空值的变量。

环境变量

还有另一种语法允许为命令分配环境变量:

nameA=valueA nameB=valueB nameC=valueC command arguments
Run Code Online (Sandbox Code Playgroud)

名称-值对用空格字符分隔。

例子

LD_PRELOAD=/path/to/my/malloc.so /bin/ls
Run Code Online (Sandbox Code Playgroud)

该命令在调用之前分配LD_PRELOAD环境变量。/path/to/my/malloc.so/bin/ls

你的命令

因此,您的命令:

projectName= echo $tempPBXProjFilePath
Run Code Online (Sandbox Code Playgroud)

实际上意味着您使用从扩展的echo参数调用命令,并将 环境变量设置为空值。$tempPBXProjFilePathprojectName

这个命令:

projectName=echo $tempPBXProjFilePath
Run Code Online (Sandbox Code Playgroud)

projectName将环境变量设置为echo字符串,并调用从变量扩展的命令$tempPBXProjFilePath

请注意,如果变量未用双引号括起来,则 shell 会解释其值中出现的特殊字符。为了防止重新解释特殊字符,您应该使用弱引用:"$variable"。如果您想防止字符串值中的变量扩展,请使用单引号:'some value'