zoukankan      html  css  js  c++  java
  • 关于shell的单引号和双引号转义 以及特殊符号相关

    关于shell的单引号和双引号转义 以及特殊符号相关
    20140603 Chenxin
    shell转义,单引号与双引号,反撇号
    1、转义
    单引号和双引号都能关闭shell对特殊字符的处理。
    不同的是,双引号没有单引号严格,单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是以下符号在双引号内仍起效果:
    ①美元符号 $ 在双引号内,仍然可以进行变量替换
    ②反撇号 `
    ③反斜杠
    这3种特殊字符不被忽略;不忽略美元符号意味着shell在双引号内部也进行变量名替换。

    1)单引号
    硬转义,单引号内的字符就是其字面意义。阻止shell进行变量替换和解释特殊字符;对于后一种情况,单引号就是个转义字符,类似于反斜线。

    2)双引号
    会进行变量替换;将整个字符串解释为一个整体,即使参数里面含有空白字符也不会被shell分割开

    3)反撇号`,相当于$()--命令替换
    会把命令执行的输出,替换;相当于函数调用,嵌套的变量会一直解析
    ① 把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套
    ② 反撇号内不能再引用反撇号,而$()中可以引用反撇号
    ③ 要把$()引用命令与${}引用变量区分开来

    4)反斜线
    用作转义字符,阻止shell将后续字符解释成特殊字符

    2、示例

    1)****/home/edwardlewis/altraman # echo 'date'
    date
    ****:/home/edwardlewis/altraman # echo "date"
    date
    ****:/home/edwardlewis/altraman # echo date
    Fri Aug 19 07:00:02 CST 2011

    2)在脚本中:
    a)newname=1.log_date +%Y-%m-%d-%H-%M
    会输出:1.log_2011-10-13-21-27
    b)tme=move_data.log_'date +%Y-%m-%d-%H-%M'
    echo ${tme}
    输出为:1.log_date +%Y-%m-%d-%H-%M
    c)tme=move_data.log_"date +%Y-%m-%d-%H-%M"
    echo ${tme}
    输出为:1.log_date +%Y-%m-%d-%H-%M

    3、其他[3]
    1)command line的每一个charactor,分为如下两种:
    *literal:普通纯文字,对shell 来说没特殊功能
    *meta:对shell来说,具有特定功能的特殊保留字符
    ① IFS:由三者之一组成,用来拆解 command line的每一个词(word),因为command line 是按词来处理的。
    ② CR:由产生。CR 用来结束 command line
    ③ =:设定变量。
    ④ $:作变量或运算替换
    ⑤ >:重导向 stdout
    ⑥ <:重导向 stdin
    ⑦ |:管道
    ⑧ &:后台运行。
    ⑨ ():将其内的命令置于 嵌套子shell中执行,或用于运算或命令替换。
    ⑩ {}:将其内的命令置于non-named function中执行,或用在变量替换的界定范围
    11 ;:在前一个命令结束时,忽略其返回值,继续执行下一个命令
    12 &&:在前一个命令结束时,若返回值为 true,继续执行下一个命令
    13 ||:在前一个命令结束时,若返回值为false,继续执行下一个命令。
    14 !:执行 history 列表中的命令
    2)假如需要在command line中将这些保留字符的功能关闭,就需要quoting处理。在bash中,常用的quoting 有三种方法:
    ① hard quote:' ' (单引号),在 hard quote 中的所有meta 均被关闭
    ② soft quote:" " (双引号),在soft quoe 中大部份meta都会被关闭,除$,`,。
    ③ escape: (反斜线),紧接 escape之后的单一meta被关闭

  • 相关阅读:
    为什么linux下多线程程序如此消耗虚拟内存【转】
    具体解说Android的图片下载框架UniversialImageLoader之磁盘缓存的扩展(二)
    【leetcode】Longest Common Prefix
    oracle插入特殊字符&#39;&amp;&#39;问题
    tomcat下配置https环境
    .NET--接口设计
    Hibernate知识点总结
    VB.NET中DataGridView控件
    eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space
    理论与实际相结合——三层架构解析
  • 原文地址:https://www.cnblogs.com/chanix/p/12738176.html
Copyright © 2011-2022 走看看