我有这样的事情:
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] 举报,一经查实,本站将立刻删除。