Shell中的Quoting

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell中的Quoting相关的知识,希望对你有一定的参考价值。

Shell中Quoting(引用),可以用来移除字符的特殊意思,令其保留字面含义;可以用来进行多种Shell Expansion。


有3种quoting机制:转义字符,单引号,和双引号。



1. 转义字符

非引用的反斜杠‘’称为转义字符,它保留了后面单个字符的字面含义(移除了特殊意义)。有个例外,反斜杠作为输入行的最后一个字符,Shell将其视为续行符,删除随后的换行符,不会将该换行符作为参数的分隔符,就像这个字符没出现过。



2. 单引号

在单引号‘'’中的所有字符,都会保留它们的字面含义。注意,一个单引号不能出现在两个单引号中间,即使其前面有反斜杠也不行。



3. 双引号

双引号中除了4个字符’$‘,‘`’,‘’和‘!’外,其它都保持字面含义(注,Shell在POSIX模式下,‘!’也保持字面含义)。 


字符‘$’和‘`’会进行Shell Expansion(如变量扩展,命令替换等)。


反斜杠‘’在‘$’,‘`’,‘"’,‘’,和newline前面时,其会被移除掉,后面的字符不变,表示字面含义。


在可History expansion时,’!‘前面需添加‘’,才能抑制该扩展,且’‘不会被移除。



另,了解下特殊的ANSI-C Quoting,形式为$'string',string中的反斜杠‘’和其后的字符会按照ANSI C的标准转义,结果就像‘$’符号不存在,只使用了单引号。如何使用ANSI-C Quoting,详见Bash编程中变量有无双引号探秘


若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).

技术分享图片

以上是关于Shell中的Quoting的主要内容,如果未能解决你的问题,请参考以下文章

Quoting in Bash

引用 -replace & 变量

七十shell中的函数shell中的数组告警系统需求分析

bash builtin eval

shell脚本中的函数,shell中的数组,shell项目-告警系统

shell中的函数shell中的数组告警系统需求分析