Linux shell脚本中字符串引用

Linux shell脚本引用是用来去除某些字符或者符号的特殊意义的。引用可以禁止对特殊字符的特殊对待,用引号括起一个字符串,以保护字符串中的特殊字符不被shell或shell脚本重新解释或扩展。

1、元字符

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

 ?列出目录中的文件时匹配单个字符,*匹配多个字符。也是大多数 shell 特殊字符(也称为元字符),元字符主要有以下几个:

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

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

例如,

#!/bin/bash
echo Hello; Word

 输出:

Hello
./demo.sh: line 2: Word: command not found
shell returned 127

使用\转义

#!/bin/bash
echo Hello\; Word

输出:

Hello; Word

2、特殊字符的引用

引用符包括 (双引号)和 '(单引号),最基本的用法就是引用字符串。单引号同双引号稍有不同,单引号不支持转义,但是双引号支持。另外,引用还可以用反斜杠(\)和反引号(`),具体如下:

1)单引号

引号之间的所有特殊字符都失去了它们的特殊含义。

2)双引号

引号之间的大多数特殊字符失去了它们的特殊含义,但有以下例外:

  • $
  • `
  • \$
  • \'
  • \"
  • \\

3)反斜杠

特殊字符前加上反斜杠后面的任何字符将失去其特殊含义。

 4)反引号

反引号之间的任何内容都将被视为命令并被执行。

3、单引号

如果多个特殊字符情况下,使用反斜杠\转义,使得字符串难以阅读,就可以考虑使用单引号('),例如,

echo \<-\$10.\*\*\>\; \(cjavapy\?\) \[y\|n\]

使用单引号

echo '<-$10.**>; (cjavapy?) [y|n]'

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

例如,

echo '<-$10.**>; \'(cjavapy?) [y|n]'

4、双引号

双引号去掉了所有字符的特殊含义,但以下字符除外:

  • $
  • `
  • \$
  • \'
  • \"
  • \\

例如,

VAR=CJAVAPY
echo "$VAR IS <-\$10.**>; [ (`date +%m/%d`) ]"

输出:

$VAR IS <-\$10.**>; [ (`date +%m/%d`) ]

单引号可以防止变量替换。如果需要要替换变量值,则需要将命令放在双引号中,如下

VAR=CJAVAPY
echo "$VAR IS <-\$10.**>; [ (`date +%m/%d`) ]"

输出:

CJAVAPY IS <-$10.**>; [ (10/05) ]

如果要输出的字符串中出现双引号,则不应将整个字符串放在双引号内,而应在其前面使用反斜杠 (\),

例如,

echo "<-$10.**>; \"(cjavapy?) [y|n]"

5、反引号

将shell 命令放在反引号之间都会执行该命令。反引号可以引用一个命令执行的结果。

语法

var=`command`

例如,

DATE=`date`
echo "当前时间: $DATE"

输出:

当前时间: 2021年 10月 05日 星期二 17:10:45 CST

推荐阅读
cjavapy编程之路首页