微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有这样的事情:

projectName= echo $tempPBXProjFilePath | sed "s/.*\/\(.*\)\.xcodeproj.*$/\1/g";

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

projectName=echo $tempPBXProjFilePath | sed "s/.*\/\(.*\)\.xcodeproj.*$/\1/g";

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

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

解决方法:

变量分配

variable assignment的语法是:

name=value

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

name='value with spaces or special characters'

或者使用variable expansion的双引号:

name="stringA $variable stringB"

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

如果缺少该值,则会创建一个值为空的变量.

环境变量

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

nameA=valueA nameB=valueB nameC=valueC command arguments

名称 – 值对用空格字符分隔.

LD_PRELOAD=/path/to/my/malloc.so /bin/ls

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

你的命令

因此,你的命令:

projectName= echo $tempPBXProjFilePath

实际上意味着您从$tempPBXProjFilePath调用带有参数expanded的echo命令,并将projectName环境变量设置为空值.

这个命令:

projectName=echo $tempPBXProjFilePath

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

请注意,如果变量未包含在双引号中,则其值中的特殊字符将由shell解释.为了防止重新解释特殊字符,您应该使用弱引用:“$variable”.如果你想阻止字符串值中的变量扩展,请使用单引号:’some value’.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐