设为首页 收藏本站
查看: 364|回复: 0

[经验分享] Linux之变量引用与命令替换

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-8 09:09:04 | 显示全部楼层 |阅读模式
在bash脚本编写中,我们时常需要引用变量与替换命令,为规范操作,现对其做简单的总结说明。


引用
    引用就是指将字符串用引用符号括起来,以防止特殊字符被shell脚本解释为其他意义。引用时屏蔽特殊字符的特殊意义,而将其解释为字面意义。
引用符、名称、意义说明表
引用符
名称
意义说明
''
单引号
称全引用或弱引用,引用所有的字符;单引号中字符除单引号本身之外都解释为字面意义,单引号不具备引用变量的功能。。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外。
""
双引号
称部分引用或强引用,引用除美元符号($)、反引号(`)和反斜线(\)之外的所有字符。即在双引号中保持美元符号($)、反引号(`)和反斜线(\)符号的特殊含义,如"$变量名"表示以变量值替换变量名。利用双引号引用变量能够防止字符串分割,保留变量中的空格。
``
反引符
shell把反引符中的内容解释为系统命令
\
反斜杠
转意符,屏蔽下一个字符的特殊意义,Linux常用的特殊字符有$、*、`、+、^、&、|、"、?

         举例:[iyunv@CentOS6 tmp]# test="x   y      z";echo '$test'

               [iyunv@CentOS6 tmp]# $test       #不会转意,单引号只把其里面的字符的字面意义直接进行输出

               [iyunv@CentOS6 tmp]#  test="x   y      z";echo $test

               [iyunv@CentOS6 tmp]#  x  y  z           #引用变量值,但不保留变量中的空格

               [iyunv@CentOS6 tmp]#  test="x   y      z";echo “$test”

               [iyunv@CentOS6 tmp]#  x   y      z      #引用变量值,并保留变量中的空格

注意:一个变量的值可以作为某个长字符串中的一部分.如果它在长字符串的末尾,就可直接引用,如果在开头或中间,应该用花括号将该变量括起来。

         举例:[iyunv@CentOS6 tmp]# test="xyz";echo test$test

               [iyunv@CentOS6 tmp]# testxyz           #正常输出

               [iyunv@CentOS6 tmp]# test="xyz";echo $testtest

               [iyunv@CentOS6 tmp]#     #不会有任何输出,因shell会去引用变量testtest的值,可该变量并没有定义赋值

               [iyunv@CentOS6 tmp]# test="xyz";echo ${test}test

               [iyunv@CentOS6 tmp]# xyztest     #正常输出


命令替换
    命令替换是指将命令的标准输出作为值赋给某个变量,bash Shell定义了两种形式进行命令的替换,两种形式的语法格式如下:
    方式一: `Linux命令`
    方式二: $(Linux命令)

         举例:[iyunv@CentOS6 tmp]# echo `pwd`
               [iyunv@CentOS6 tmp]# /tmp           #引用pwd命令的执行结果并输出

      注意:尽管$()和反引号在命令替换上是等价的,但是,$()形式的命令替换是可以嵌套的
       bash Shell中,反引号与$()在处理双反斜线符号时存在区别。
            [iyunv@CentOS6 tmp]#echo \\
            [iyunv@CentOS6 tmp]#\            #输出转义符
            [iyunv@CentOS6 tmp]#echo `echo \\`
            [iyunv@CentOS6 tmp]#              #输出空白行
            [iyunv@CentOS6 tmp]##echo $(echo \\)
            [iyunv@CentOS6 tmp]#\             #输出单斜线


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-54864-1-1.html 上篇帖子: CentOS7/RHEL7 systemd详解 下篇帖子: linux bond 修改模式 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表