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

$ 符号是其中一个元字符,因此必须引用它以避免shell的特殊处理和减号;

#!/bin/sh

echo "I have \$1200"

执行后,您将收到以下结果 :

I have $1200

下表列出了四种形式的引用 :

Sr.No.报价&描述
1

单引号

这些引号之间的所有特殊字符都会失去特殊含义.

2

双引号

这些引号之间的大多数特殊字符在这些例外情况下会失去特殊含义 :

  • $

  • `

  • \ $

  • \'

  • "

  • \\

3

反斜杠

反斜杠后面的任何字符都会失去其特殊含义.

4

返回报价

后面引号之间的任何内容都会被处理作为一个命令,将被执行.

The S ingle引号

考虑一个包含许多特殊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`) ]"

执行后,您将收到以下结果 :

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

双引号除去以下所有字符的特殊含义;

  • $ 参数替换

  • 命令的反引号替换

  • \ $ 启用文字美元符号

  • \` 启用文字反引用

  • "启用嵌入式双引号

  • \\ 启用嵌入式反斜杠

  • 所有其他 \ 字符都是文字(非特殊)

引用单引号中的字符就好像每个字符前面都有一个反斜杠.这有助于正确显示echo命令.

如果单个引号出现在要输出的字符串中,则不应将整个字符串放在单引号内相反,你应该先使用反斜杠(\),如下所示 :

echo 'It\'s Shell Programming'

Backquotes

backquotes 之间放置任何Shell命令都会执行命令.

语法

这是简单的语法将任何Shell 命令放在反引号和减号之间;

 var =`command`

示例

date 命令在以下示例中执行,生成的结果存储在DATA变量中.


DATE=`date`

echo "Current Date: $DATE"

执行后,您将收到以下结果 :

Current Date: Thu Jul  2 05:28:45 MST 2009