Unix / Linux - Shell 引用机制

  • 简述

    本章,我们将详细讨论 Shell 的引用机制。我们将从讨论元字符开始。
  • 元字符

    Unix Shell 提供了各种元字符,这些元字符在任何 Shell 脚本中使用时都具有特殊含义,除非被引用,否则会导致单词终止。
    例如, ? 列出目录中的文件时与单个字符匹配,并且 *匹配多个字符。这是大多数 shell 特殊字符(也称为元字符)的列表 -
    
    * ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
    
    一个字符可以通过在它前面加上一个引号来引用(即代表它自己) \.

    例子

    以下示例显示了如何打印 *?
    
    #!/bin/sh
    echo Hello; Word
    
    执行后,您将收到以下结果 -
    
    Hello
    ./test.sh: line 2: Word: command not found
    shell returned 127
    
    现在让我们尝试使用带引号的字符 -
    
    #!/bin/sh
    echo Hello\; Word
    
    执行后,您将收到以下结果 -
    
    Hello; Word
    
    $ sign 是元字符之一,因此必须引用它以避免 shell 进行特殊处理 -
    
    #!/bin/sh
    echo "I have \$1200"
    
    执行后,您将收到以下结果 -
    
    I have $1200
    
    下表列出了四种引用形式 -
    序号 引用和描述
    1
    单引号
    这些引号之间的所有特殊字符都失去了它们的特殊含义。
    2
    双引号
    除了这些例外,这些引号之间的大多数特殊字符都失去了特殊含义 -
    • $
    • `
    • \$
    • \'
    • \"
    • \\
    3
    反斜杠
    紧跟在反斜杠后面的任何字符都失去了它的特殊含义。
    4
    反引号
    反引号之间的任何内容都将被视为命令并被执行。
  • 单引号

    考虑一个包含许多特殊 shell 字符的 echo 命令 -
    
    echo <-$1500.**>; (update?) [y|n]
    
    在每个特殊字符前面加一个反斜杠很乏味,而且使行难以阅读 -
    
    echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
    
    有一种简单的方法可以引用一大群字符。在字符串的开头和结尾放置一个单引号 (') -
    
    echo '<-$1500.**>; (update?) [y|n]'
    
    单引号内的字符被引用,就像每个字符前面都有一个反斜杠一样。有了这个,echo 命令以正确的方式显示。
    如果要输出的字符串中出现单引号,则不应将整个字符串放在单引号内,而应在其前面使用反斜杠 (\),如下所示 -
    
    echo 'It\'s Shell Programming
    
  • 双引号

    尝试执行以下 shell 脚本。这个 shell 脚本使用单引号 -
    
    VAR=ZARA
    echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
    
    执行后,您将收到以下结果 -
    
    $VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
    
    这不是必须显示的内容。很明显,单引号可以防止变量替换。如果要替换变量值并使引号按预期工作,则需要将命令放在双引号中,如下所示 -
    
    VAR=ZARA
    echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
    
    执行后,您将收到以下结果 -
    
    ZARA owes <-$1500.**>; [ as of (07/02) ]
    
    双引号消除了所有字符的特殊含义,但以下字符除外 -
    • $ 用于参数替换
    • 命令替换的反引号
    • \$ 启用文字美元符号
    • \` 启用文字反引号
    • \" 启用嵌入式双引号
    • \\ 启用嵌入式反斜杠
    • 所有其他 \ 字符是文字​​(不是特殊的)
    单引号内的字符被引用,就像每个字符前面都有一个反斜杠一样。这有助于 echo 命令正确显示。
    如果要输出的字符串中出现单引号,则不应将整个字符串放在单引号内,而应在其前面使用反斜杠 (\),如下所示 -
    
    echo 'It\'s Shell Programming'
    
  • 反引号

    将任何 Shell 命令置于其间 backquotes 执行命令。

    句法

    这是放置任何Shell的简单语法 command 在反引号之间 -
    
    var=`command`
    

    例子

    date 命令在以下示例中执行,生成的结果存储在 DATA 变量中。
    
    DATE=`date`
    echo "Current Date: $DATE"
    
    执行后,您将收到以下结果 -
    
    Current Date: Thu Jul  2 05:28:45 MST 2009