美文网首页
bash中的三种引号

bash中的三种引号

作者: ifeelok0319 | 来源:发表于2017-06-07 23:28 被阅读140次

    bash中有三种引号

    • 单引号

    两个单引号包围起来的字符串就是普通的字符串,它将保留原始的字面意思

    • 双引号

    两个双引号包围起来的字符串,部分特殊字符将起到它们的作用。
    这些特殊字符有:美元符,反斜杠,反引号,感叹号。

    • 反引号

    两个反引号包围起来的字符串,将作为命令来运行,执行的输出结果作为该反引号的内容,称为命令替换。
    它有另一种更好的写法:$(command)

    1. 美元符$在单、双引号中的表现: 在双引号中的$,将发生变量引用, 而在单引号中的$, 将保留它的字面意思
    2. 反斜杠在单、双引号中的表现: 在双引号中的反引号,将转义它后面的字符,使其具有特殊意义或者失去原来的特殊意义,在单引号中的反斜杠,将保留它的字面意思
    3. 反引号与其他两种引号的不同: 反引号包围起来的字符串将被运行,取其结果

    常见的问题

    • 把反引号写成单引号
    • 总是忘了加双引号
    seq 3
    1
    2
    3
    
    echo `seq 3`
    1 2 3
    
    echo "`seq 3`"
    1
    2
    3
    

    seq输出的是包含换行的信息,但第二条命令却丢失了换行符,因为bash在解析时认为反引号的输出结果是3个独立的字符,解析后与echo 1 2 3相同(这个过程,bash做了很多工作,有兴趣的可以了解下bash解析顺序); 而第三条命令,bash把反引号的输出结果当成一个整体对待(因为它被双引号包围),所以输出的结果不会被bash拆分对待,换行符得以保留。所以,当你需要保留变量或者命令替换的 完整信息, 特别是换行符时,请记得给它们戴上双引号作保险,时刻加个双引号是个好习惯(为什么不是单引号呢?前面解释了,单引号里面没有魔法,变量也变不了了,命令替换也替换不了了)。

    • 引号嵌套总是混乱的

    双引号中加入其他引号很容易,你只需要用反斜杠\转义你要添加的引号。
    单引号中加入单引号:

    echo $'abc\'abc'
    echo -e 'abc\x27abc'
    echo 'abc'\''abc'
    

    第一种方法是bash特有的,$'string' 之间到反斜杠都将转义字符,第二种方法,通过单引号的ASCII码来打印单引号,而第三种方法,则是通过截断命令,在中间插入单引号来实现。一般用第一种方法是最优雅的。

    相关文章

      网友评论

          本文标题:bash中的三种引号

          本文链接:https://www.haomeiwen.com/subject/oezafxtx.html