Shell中的单引号(‘)双引号(”)和反引号(·)

在bash中,$、*、?、[、]、’、”、`、\、有特殊的含义。类似于编译器的预编译过程,bash在扫描命令行的过程中,会在文本层次上,优先解释所有的特殊字符,之后对转换完成的新命令行,进行内核的系统调用。

其中,反引号类似于函数调用,而不仅仅是简单的文本替换及匹配。

 

命令行中,被单引号引用的部分,其中所有的特殊字符按照普通字符解释;

双引号引用的部分,仅解释$(美元符号)、\(\n \t除外)、`(反引号),解释后的文本仅按照普通文字处理(同单引号)。

反引号相当于命令替换,引用的部分优先执行,将运行结果替换到外层的命令行文本中;反引号可以嵌套,但是嵌套时内部的反引号必须用\转义

反斜杠用于命令换行,以及echo -e解释。

 

 

网上各种文章常见的例子,其中第二行重点介绍一下:

# x=*                     
# echo x      x替换为*,之后将*替换为当前目录下所有文件列表的文本,

          该文本作为参数赋给echo(bash会自动按照优先级,进行多层次替换 )
hello.sh menus.sh misc.sh phonebook tshift.sh
# echo 'xx不进行任何解释,直接将文本‘xechox
# echo "x"x替换为*,但是由于在双引号内,*不做替换,因此文本“*”将作为参数赋给echo

 

 

 

Tips:

 

大多数Linux Distribution的默认shell为bash,查询当前主机所有shell可执行如下命令:

$ cat  /etc/shell

 

bash内部集成了40多条命令,通用格式为:

$ 命令 [-选项] [参数]

其中,”-“后为单字符选项,"--"后为完整的单词选项。一般来说,命令的某项功能(feature),会同时支持单字符选项及对应的多字符选项。

 

在bash中,*、?、[、]有特殊的含义,用于字符匹配。*代表0到多个字符,?代表单个字符。[]用于匹配单个字符,内部用短横线按照ASCII码顺序标明匹配的字符范围,或者枚举所有要匹配的字符。

在编写shell脚本时对于引号的应用也是十分重要的,这里总结一下三种引号的特点。

1、单引号(‘’),被单引号包裹的内容会将其视为字符串,即使做了像 \n  这样的换行,也会照样输出 \n 而不是 换行。
 
2、双引号(“”),和单引号不同的是,双引号会将包裹内容的转义字符输出。下面做一个例子:
[javascript] 
$ name=kehr  
echo"name"  
kehr  
echoname'  
$name  
明显可以看出二者的差别
 
3、小引号(``)这个符号也不知道学名叫什么,我管它叫“小引号”,哈哈。
它的作用是,被小引号包裹的内容会先执行。
 
例如,当我们在安装内核devel等文件的时候会用到下面的命令:
[html] 
yum install kernel-devel-`uname -r`  
 
这里的小引号就是键盘数字1,左边的那个键。

 

posted @   叕叒双又  阅读(6588)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示