📜  Unix / Linux-Shell报价机制

📅  最后修改于: 2020-10-31 14:54:58             🧑  作者: Mango


在本章中,我们将详细讨论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. Quoting & Description
1

Single quote

All special characters between these quotes lose their special meaning.

2

Double quote

Most special characters between these quotes lose their special meaning with these exceptions −

  • $
  • `
  • \$
  • \’
  • \”
  • \\
3

Backslash

Any character immediately following the backslash loses its special meaning.

4

Back quote

Anything in between back quotes would be treated as a command and would be executed.

单引号

考虑一个包含许多特殊shell字符的echo命令-

echo ; (update?) [y|n]

在每个特殊字符的前面加上反斜杠很乏味,并且使该行难以阅读-

echo \\; \(update\?\) \[y\|n\]

有一种简单的方法可以引用大量字符。在字符串的开头和结尾处加上单引号(’)-

echo '; (update?) [y|n]'

单引号内的字符被引用,就好像一个反斜杠在每个字符的前面。这样,echo命令将以正确的方式显示。

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

echo 'It\'s Shell Programming

双引号

尝试执行以下shell脚本。这个shell脚本使用单引号-

VAR=ZARA
echo '$VAR owes ; [ as of (`date +%m/%d`) ]'

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

$VAR owes ; [ as of (`date +%m/%d`) ]

这不是必须显示的内容。显然,单引号可以防止变量替换。如果要替换变量值并使反逗号逗号按预期工作,则需要将命令放在双引号中,如下所示:

VAR=ZARA
echo "$VAR owes ; [ as of (`date +%m/%d`) ]"

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

ZARA owes ; [ as of (07/02) ]

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

  • $用于参数替换

  • 命令替换的反引号

  • \ $启用字面量美元符号

  • \`启用字面量反引号

  • \“启用嵌入式双引号

  • \\启用嵌入式反斜杠

  • 所有其他\字符都是字面量(不是特殊的)

单引号内的字符被引用,就好像一个反斜杠在每个字符的前面。这有助于echo命令正确显示。

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

echo 'It\'s Shell Programming'

反引号

将任何Shell命令放在反引号之间将执行该命令。

句法

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

var=`command`

在以下示例中执行date命令,并将产生的结果存储在DATA变量中。

DATE=`date`

echo "Current Date: $DATE"

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

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