zoukankan      html  css  js  c++  java
  • shell脚本中的单引号和双引号以及反引号详解

    文章目录
    引用
    单引号'
    双引号"
    反斜线
    反引号`
    引用
    在第五章中讲到shell中的引用,shell能识别到4种不同的引用字符:

    单引号’
    双引号"
    反斜线
    反引号`
    前两种和最后一种必须成对出现,而反斜线可以在命令中根据需要多次出现,这些引用字符在shell中的含义和功能各不相同。

    单引号’
    shell碰到第一个’,在遇到用于封闭的’之前,shell会忽略单引号对中引用的所有特殊字符,即不再解释字符串中任何特殊字符,对内容的保护比较强,单引号最常见的地方就是一个字符串参数中含有空格时,shell通常会使用空格作为分割符,将一个字符串解释成了多个字符串参数,如下例:

    $ echo one teo three four
    one teo three four
    $ echo 'one teo three four'
    one teo three four
    1
    2
    3
    4
    双引号"
    双引号的作用类似于单引号,除了对于内容的保护要弱于后者,双引号会忽略引用的大部分特殊字符。具体来说,下面3个字符在双引号中不会被忽略:

    美元符号 $
    反引号 `
    反斜线
    touch file{01..10}
    filelist=*
    echo $filelist
    file01 file02 file03 file04 file05 file06 file07 file08 file09 file10
    echo '$filelist'
    $filelist
    echo "$filelist"
    *
    1
    2
    3
    4
    5
    6
    7
    8
    上面的例子中对比了不使用引号,使用单引号以及使用双引号之间的主要不同,在第3行中shell看到了星号并将其替换成当前目录下的所有文件名, 在第5行中,shell完全不处理单引号中的字符,因此显示出了" f i l e l i s t " , 在 第 7 行 中 双 引 号 指 示 s h e l l 需 要 在 其 中 执 行 变 量 名 替 换 , 因 此 s h e l l 将 " filelist", 在第7行中双引号指示shell需要在其中执行变量名替换,因此shell将" filelist",在第7行中双引号指示shell需要在其中执行变量名替换,因此shell将"filelist"解释为"",因为文件名不会再双引号中完成,所以被只有""被传递给了echo。

    当字符串中含有单引号或双引号时,可以使用双引号来保留单引号,反之亦然。

    x=" hello, 'world'"
    echo $x
    hello, 'world'
    y=' hello, "world"'
    echo $y
    hello, "world"
    1
    2
    3
    4
    5
    6
    反斜线
    除了少数几处例外,反斜线(作为前缀使用)在功能上相当于在单个字符周围放置单引号,反斜线可以对紧随其后的字符进行转义。

    echo >
    -bash: syntax error near unexpected token `newline'
    echo >

    x=*
    echo $x
    $x
    1
    2
    3
    4
    5
    6
    7
    如上,shell忽略了反斜线之后的>和$x,所以不在执行变量替换。

    当反斜线作为一行最后一个字符时,shell将其视为续行符,会删除随后的换行符,也不会将该换行符作为参数分隔符(假装这个字符没出现过)。在输入跨多行的长命令时经常用这种方法。

    $ echo "1234

    5678
    90"
    1234567890
    1
    2
    3
    4
    值得注意的是反斜线的作用在双引号中也是有效的,但在单引号中被作为普通字符处理

    反引号`
    反引号不像之前碰到的那些引号,因为它的功能和用法和前面那三种完全不同。反引号用于告诉shell将其中的命令使用命令输出代替, shell会先执行反引号或者 ( ) 中 的 指 令 , 将 输 出 插 入 到 对 应 的 位 置 中 。 反 引 号 和 ()中的指令,将输出插入到对应的位置中。反引号和 ()中的指令,将输出插入到对应的位置中。反引号和(…)在功能上是一样的,只是$(…)是一种更新更可取的命令替换写法。反引号的一般使用格式为:

    command
    1
    echo The date and time is: date
    The date and time is: Sun Jan 5 15:17:27 CST 2020
    echo The date and time is: $(date)
    The date and time is: Sun Jan 5 15:17:39 CST 2020
    1
    2
    3
    4
    name="AbcDefg"

    转化为大写

    name=$(echo $name | tr '[a-z]' 'A-Z')
    echo $name
    ACDDFGH

  • 相关阅读:
    Docker-(三).Dockerfile
    Docker-(二).使用操作
    Docker-(一).安装
    Mac-brew install mysql
    Mac-brew
    Selenium HTMLTestRunner 执行测试成功但无法生成报告
    12.Python爬虫利器三之Xpath语法与lxml库的用法
    11.Python-第三方库requests详解(三)
    10.Python-第三方库requests详解(二)
    9.Python爬虫利器一之Requests库的用法(一)
  • 原文地址:https://www.cnblogs.com/lidabo/p/14763794.html
Copyright © 2011-2022 走看看