我有这样的东西:
projectname= echo $tempPBXProjfilePath | sed "s/.*/(.*).xcodeproj.*$/1/g";
我想从$tempPBXProjfilePath提取子string。 这是正确的。 但是,如果我这样写:
projectname=echo $tempPBXProjfilePath | sed "s/.*/(.*).xcodeproj.*$/1/g";
这是错误的。 区别在于variables之后的空格。
我知道直接variables之后没有空格。 但等号后的空格是什么意思? 有没有地方空白有特殊的意义?
sh中的“&>>”在Ubuntu 16.04.2和Fedora 24中performance方式各不相同
如何在linux shell脚本中查找和删除基于date的文件而不查找?
为什么redirect符号会改变ls的行为?
如何以编程方式检测linux或OS X中的可用实用程序
Bash:从文本文件VAR = VALUE格式中读取variables
getopts不工作 – bash
将所有邮件redirect到文件
“mv file1 * .file1”是做什么的?
完成function读取文件时,Bash完成有时会对我的terminal进行网格划分
分割成多行时如何避免回显中的空格
变量赋值
变量赋值的语法是:
name=value
请注意, =号旁边没有空格。 如果值有空格或特殊字符,则应该用单引号括起来:
name='value with spaces or special characters'
或用双引号进行可变扩展 :
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 扩展的参数调用echo命令,并将projectname环境变量设置为空值。
而这个命令:
projectname=echo $tempPBXProjfilePath
将projectname环境变量设置为echo字符串,并调用从$tempPBXProjfilePath变量扩展的命令。
注意,如果一个变量没有用双引号括起来,那么其值中的特殊字符就会被shell解释。 为了防止重新解释特殊字符,你应该使用弱引用: "$variable" 。 如果要防止字符串值中的变量扩展,请使用单引号: 'some value' 。
Bash在每个空白处(空格或制表符)将每一行分成单词。
它找到的第一个单词是要执行的命令的名称,其余的单词成为该命令的参数。
所以当你通过
projectname=echo
bash理解projectname = echo作为变量赋值,并且
$tempPBXProjfilePath | sed "s/.*/(.*).xcodeproj.*$/1/g";
作为命令! (正如Chris Dodd指出的那样)
空白
在赋值给变量时,在等号(=)的一边或两边放置空格将会失败。
错误1
example = Hello
错误2
example= Hello
错误3
example =Hello
唯一有效的形式是变量名和赋值之间没有空格:
正确1
example=Hello
正确2
example=" Hello"
你可以看到更多:
http://wiki.bash-Hackers.org/scripting/newbIE_traps
总结以上是内存溢出为你收集整理的空白在bash中究竟意味着什么?全部内容,希望文章能够帮你解决空白在bash中究竟意味着什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)