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).

qrcode_for_gh_54ffa7e55478_258.jpg

转载于:https://blog.51cto.com/coveringindex/2142102

Published by

风君子

独自遨游何稽首 揭天掀地慰生平