Linux Shell的特殊字符

在本章中,我们将详细讨论Shell的特殊字符。我们将从讨论元字符开始。

元字符

Linux Shell提供了各种元字符,这些元字符在任何Shell脚本中使用时都具有特殊含义,除非被引用,否则会导致单词终止。

例如,?列出目录中的文件时匹配单个字符,*匹配多个字符。这是大多数Shell特殊字符(也称为元字符)的列表。

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

一个字符可以通过在它前面加上\来引用(即代表它自己)。

示例

以下示例显示如何打印;

#!/bin/bash

echo Hello; Word

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

Hello; Word

$符号是元字符之一,所以必须引用以避免特殊处理

#!/bin/bash

echo "I have \$1200"

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

I have $1200

下表列出了四种引用形式

No. 命令和描述
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 (10/02) ]

双引号消除了所有字符的特殊含义,但以下字符除外 -

  • $用于参数替换
  • 命令替换的反引号
  • \$显示文字美元符号
  • `显示文字反引号
  • \"显示嵌入的双引号
  • \显示嵌入的反斜杠
  • 所有其他\字符都是文字(不是特殊的)

反引号

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

语法

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

var=`command`

反引号示例

下面的示例中执行日期命令,并且所产生的结果被存储在DATA变量。

DATE=`date`

echo "Current Date: $DATE"

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

Current Date: Thu Oct  7 08:57:15 CST 2021