- Linux自动化运维:Shell与Ansible(微课版)
- 杨寅冬主编
- 1290字
- 2024-07-26 17:04:23
1.2.6 转义符
在计算机科学与远程通信中,当将转义符放在字符序列中时,它将对其后续的几个字符进行替代并解释。通常,可以通过上下文判定某字符是否为转义符。转义符即标志着转义序列开始的那个字符。
转义序列通常有两种功能。第一种功能是编码无法用字母表直接表示的特殊数据;第二种功能是表示无法直接通过键盘输入的字符(如回车符)。
本节说的转义符就对应第二种功能,即将转义符自身和后面的字符看作一个整体,表示某种含义。常见的示例是用反斜线“\”作为转义符,表示那些不可打印的ASCII控制符。另外,在统一资源标识符(Uniform Resource Identifier,URI)中,请求串中的一些符号有特殊含义,也需要转义,转义符使用百分号“%”。
V1-6 转义符
在日常工作中经常会遇到转义符,如在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.
1. 反斜线
在Shell中,反斜线(\)是一个特殊字符,用于改变一些字符的含义。例如,可以使用反斜线来输出特殊字符,或者将特殊字符视为普通字符。
Shell中有很多元字符,如果要查找星号(*)、加号(+)、问号(?)本身,而不是元字符,则需要对其进行转义。常见的转义序列如表1-9所示。
表1-9 常见的转义序列
使用以下命令输出一个反斜线字符:
echo "\\"
输出结果如下。
\
反斜线也可以用来输出其他特殊字符,如使用以下命令输出换行符:
echo -e "Hello\nWorld"
输出结果如下。
Hello World
使用以下命令输出一个水平制表符:
echo -e "Hello\tWorld"
输出结果如下。
Hello World
2. 反引号
在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
如果将命令的输出用作另一个命令的参数,或者将命令的输出赋给一个变量以供脚本中以后使用,则命令替换可能很有用。注意,反引号字符和单引号(')字符不同,单引号用于标识应该被当作字面值处理的字符串,而不对其进行任何解释或替换。
3. 双引号
在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"
4. 单引号
在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'