我有这样的事情:
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)
这是错误的.区别在于变量之后的空格.
我知道变量后面没有空格.但是等号后的空白是什么意思.空白有什么特别的意义吗?
变量赋值的语法是:
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
参数调用命令,并将 环境变量设置为空值。$tempPBXProjFilePath
projectName
这个命令:
projectName=echo $tempPBXProjFilePath
Run Code Online (Sandbox Code Playgroud)
projectName
将环境变量设置为echo
字符串,并调用从变量扩展的命令$tempPBXProjFilePath
。
请注意,如果变量未用双引号括起来,则 shell 会解释其值中出现的特殊字符。为了防止重新解释特殊字符,您应该使用弱引用:"$variable"
。如果您想防止字符串值中的变量扩展,请使用单引号:'some value'
。
归档时间: |
|
查看次数: |
99 次 |
最近记录: |