Shell中的空格和引号


 

空格对于linux的shell是一种很典型的分隔符,所以给变量赋值的时候中间不能够有空格。而单引号和双引号,都是为了解决中间有空格的问题。比如string1=this is a string,这样执行就会报错。为了避免这个问题,因此就产生了单引号和双引号。

单引号将剥夺其中的所有字符的特殊含义,阻止对所有字符的转义, 将所有的字符看做其字面的意思。而双引号会处理字符串中的'$'(参数替换),'``' or '()'(命令替换),'\' 转义字符 和算数等。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`(我不是单引号)。

eg:

参数替换符$:

 

[~]$Name="eabbefh"

[~]$echo " Hello, $Name"

 Hello, eabbefh
[~]$Name="eabbefh"

[~]$echo 'Hello, $Name'

Hello, $Name

 命令替换符'$' or '``'(在美式键盘上,`是ESC下面的那个键):

echo$(ls)来说明整个替换过程:shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令echo $(ls)中的$(ls)位置,即替换了$(ls),再执行echo命令。如下:

[~/ltetools/doc]$ls
FAQ.mht*  LteBasebandTutorial.mht*  LteObservabilityTutorial.mht*
[~/ltetools/doc]$echo $(ls)
FAQ.mht LteBasebandTutorial.mht LteObservabilityTutorial.mht

 

NodeID=`egrep -i \(^RBS${NodeID}\)\|\(^${NodeID}\) ${IPLib} | gawk '{print $2}'` 
NodeID=$(egrep -i \(^RBS${NodeID}\)\|\(^${NodeID}\) ${IPLib} | gawk '{print $2}')

以上两条命令效果相同。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM