Unix / Linux – Shell 引用机制
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
该$符号是元字符之一,所以必须引述外壳以避免特殊处理-
#!/bin/sh echo "I have \$1200"
执行后,您将收到以下结果 –
I have $1200
下表列出了四种引用形式 –
Sr.No. | 引用和描述 |
---|---|
1 |
Single quote 这些引号之间的所有特殊字符都失去了它们的特殊含义。 |
2 |
Double quote 除了这些例外,这些引号之间的大多数特殊字符都失去了特殊含义 –
|
3 |
Backslash 紧跟在反斜杠后面的任何字符都失去了它的特殊含义。 |
4 |
Back quote 反引号之间的任何内容都将被视为命令并被执行。 |
单引号
考虑一个包含许多特殊 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 命令放在反引号之间都会执行该命令。
句法
这是将任何 Shell命令放在反引号之间的简单语法–
var=`command`
例子
的日期命令在下面的示例中执行,并且所产生的结果被存储在DATA变量。
DATE=`date` echo "Current Date: $DATE"
执行后,您将收到以下结果 –
Current Date: Thu Jul 2 05:28:45 MST 2009