• Shell中的单引号(‘)双引号(”)和反引号(·)


    在bash中,$、*、?、[、]、’、”、`、、有特殊的含义。类似于编译器的预编译过程,bash在扫描命令行的过程中,会在文本层次上,优先解释所有的特殊字符,之后对转换完成的新命令行,进行内核的系统调用。

    其中,反引号类似于函数调用,而不仅仅是简单的文本替换及匹配。

    命令行中,被单引号引用的部分,其中所有的特殊字符按照普通字符解释;

    双引号引用的部分,仅解释$(美元符号)、( 除外)、`(反引号),解释后的文本仅按照普通文字处理(同单引号)。

    反引号相当于命令替换,引用的部分优先执行,将运行结果替换到外层的命令行文本中;反引号可以嵌套,但是嵌套时内部的反引号必须用转义

    反斜杠用于命令换行,以及echo -e解释。

    网上各种文章常见的例子,其中第二行重点介绍一下:

    # x=*                     
    # echo $x      此行执行了两次替换,将$x替换为*,之后将*替换为当前目录下所有文件列表的文本,

              该文本作为参数赋给echo(bash会自动按照优先级,进行多层次替换 )
    hello.sh menus.sh misc.sh phonebook tshift.sh
    # echo '$x'               $x不进行任何解释,直接将文本‘$x’作为参数赋给echo
    $x
    # echo "$x"              $x替换为*,但是由于在双引号内,*不做替换,因此文本“*”将作为参数赋给echo

    Tips:

    大多数Linux Distribution的默认shell为bash,查询当前主机所有shell可执行如下命令:

    $ cat  /etc/shell

    bash内部集成了40多条命令,通用格式为:

    $ 命令 [-选项] [参数]

    其中,”-“后为单字符选项,"--"后为完整的单词选项。一般来说,命令的某项功能(feature),会同时支持单字符选项及对应的多字符选项。

    在bash中,*、?、[、]有特殊的含义,用于字符匹配。*代表0到多个字符,?代表单个字符。[]用于匹配单个字符,内部用短横线按照ASCII码顺序标明匹配的字符范围,或者枚举所有要匹配的字符。

    在编写shell脚本时对于引号的应用也是十分重要的,这里总结一下三种引号的特点。

    1、单引号(‘’),被单引号包裹的内容会将其视为字符串,即使做了像  这样的换行,也会照样输出 而不是 换行。
     
    2、双引号(“”),和单引号不同的是,双引号会将包裹内容的转义字符输出。下面做一个例子:
    [javascript] 
    $ name=kehr  
    $ echo "$name"  
    kehr  
    $ echo '$name'  
    $name  
    明显可以看出二者的差别
     
    3、小引号(``)这个符号也不知道学名叫什么,我管它叫“小引号”,哈哈。
    它的作用是,被小引号包裹的内容会先执行。
     
    例如,当我们在安装内核devel等文件的时候会用到下面的命令:
    [html] 
    yum install kernel-devel-`uname -r`  
     
    这里的小引号就是键盘数字1,左边的那个键。
  • 相关阅读:
    CCF-CSP认证 C++题解目录
    LeetCode周赛#205
    LeetCode双周赛#34
    Codeforces Round #667 (Div. 3) B、C、D、E 题解
    Codeforces Round #656 (Div. 3) 题解
    牛客小白月赛#26 题解
    LeetCode周赛#204 题解
    LeetCode周赛#203 题解
    牛客小白月赛#27 题解
    N阶上楼梯问题——动态规划(递推求解)
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6871599.html
Copyright © 2020-2023  润新知