首页 > 编程笔记 > Linux笔记 阅读:12

Shell中的4种转义字符(附带实例)

在计算机科学与远程通信中,当将转义字符放在字符序列中时,它将对其后续的几个字符进行替代并解释。通常,可以通过上下文判定某字符是否为转义字符,转义字符即标志着转义序列开始的那个字符。

转义序列通常有两种功能:
本节说的转义字符就对应第二种功能,即将转义字符自身和后面的字符看作一个整体,表示某种含义。

常见的示例是用反斜线“\”作为转义字符,表示那些不可打印的 ASCII 控制符。另外,在统一资源标识符(Uniform Resource Identifier,URI)中,请求串中的一些符号有特殊含义,也需要转义,转义字符使用百分号“%”。

在日常工作中经常会遇到转义字符,如在 Shell 中删除文件时,如果文件名中有星号“*”,则需要转义,使用了转义字符后,“*”就能作为文件名使用了。
rm access_log* # 删除当前目录下文件名以access_log开头的文件
rm access_log\* # 删除当前目录下文件名为access_log*的文件

又如,在双引号中又使用双引号时就需要转义,转义之后才能正常表示双引号,否则会报语法错误。例如:
printf "This is a string with \"double quotes\" inside it.\n"
输出结果如下:

This is a string with "double quotes" inside it.

Shell反斜线

在 Shell 中,反斜线(\)是一个特殊字符,用于改变一些字符的含义。例如,可以使用反斜线来输出特殊字符,或者将特殊字符视为普通字符。

Shell 中有很多元字符,如果要查找星号(*)、加号(+)、问号(?)本身,而不是元字符,则需要对其进行转义。常见的转义序列如下表所示。

表 1 常见的转义序列
序号 转义序列 描述
1 \ 转义字符
2 \\ 反斜线字符
3 \' 单引号字符
4 \" 双引号字符
5 \n 换行符,将当前位置移到下一行开头
6 \r 回车符,将当前位置移到本行开头
7 \t 水平制表符(跳到下一个制表位)
8 \v 垂直制表符

使用以下命令输出一个反斜线字符:
echo "\\"
输出结果如下:

\


反斜线也可以用来输出其他特殊字符,如使用以下命令输出换行符:
echo -e "Hello\nWorld"
输出结果如下:

Hello
World


使用以下命令输出一个水平制表符:
echo -e "Hello\tWorld"
输出结果如下:

Hello World

Shell反引号

在 Shell 中,反引号(`)用于标识被执行的命令,并且命令的输出会替换反引号中的内容,这称为命令替换。

使用命令替换将命令的输出赋给一个变量:
foo=`date`
echo $foo
Mon Jan 9 15:16:27 CST 2023

使用命令替换在其他命令中包含命令的输出:
echo Today is `date`
Today is Thu Nov 23 05:33:29 PM CST 2023

如果将命令的输出用作另一个命令的参数,或者将命令的输出赋给一个变量以供脚本中以后使用,则命令替换可能很有用。

注意,反引号字符和单引号(')字符不同,单引号用于标识应该被当作字面值处理的字符串,而不对其进行任何解释或替换。

Shell双引号

在 Shell 中,双引号(")是一种特殊的字符,用于标识带有变量或转义字符的字符串。双引号作为转义字符时,可以方便地在字符串中输出变量的值,以及输出特殊字符。

使用双引号时,变量名会被替换为变量的值,而转义字符会按照其原来的意义被解释。例如:
name="John"
echo "My name is $name"
echo "This is a \"quote\""
输出结果如下:

My name is John
This is a "quote"


在双引号内,如果需要输出双引号本身,则可以使用反斜线(\)将其转义。例如:
echo "This is a \"quote\""
输出结果如下:

This is a "quote"

Shell单引号

在 Shell 中,单引号(')是一种特殊的字符,用于标识字符串,其中的内容不会被解释。单引号作为转义字符时,可以方便地保留字符串中的内容。

使用单引号时,变量名和转义字符都不会被替换或解释。例如:
name="John"
echo 'My name is $name'
echo 'This is a \"quote\"'
输出结果如下:

My name is $name
This is a \"quote\"


如果需要在单引号内输出单引号本身,则可以通过组合单引号和双引号实现。例如:
echo 'This is a '"'"'quote'"'"''
输出结果如下:

This is a 'quote'

相关文章