通过echo看shell的单双引号 2025-08-11

内容分享2小时前发布
0 2 0

shell的 单双引号、反引号与反斜杠

  • 单引号:所见即所得
  • 双引号:所见非所得。会先把变量解析之后,再输出
  • 反引号(“) :命令替换,一般用于把命令输出结果传给入变量中
  • 反斜杠( ) :转义字符or逃脱字符,Linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号

bash脚本的手册里面有更完整的介绍

echo (-E)

按照上面介绍的shell规则,echo使用单引号可以原封不动输出任何字符
但需要注意,这时不能输出内部的单引号,
eg.

[root@VM-165-116-centos tmp]# echo  my name is  bob 
 
my name is bob
 

而我们的预期是输出

my name is  bob 

这说明,echo的内容实际上是 my name is +bob+
,也就是echo认为的单引号对与我们预期的单引号对不一致,echo是就近原则

如果想用 echo 单引 输出内部的单引号,可以

1. 主动截断,把echo的原始内容分割成多部分

利用echo就近配对,我们可以主动截断来完成单引号的输出

[root@VM-165-116-centos tmp]# echo  my name is  " " bob " " 
   
my name is  bob 

echo的内容实际上是 my name is +" "+ bob +" "+

2. 使用echo -e

-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)

echo 使用-e option可以对待输出内容进行反斜杠转义
于是我们可以使用x27替换

[root@VM-165-116-centos tmp]# echo -e  my name is x27bobx27
  
my name is  bob 

[root@VM-165-116-centos tmp]# 

单引号的输出符合预期,但是末尾
被backslash escape了,没有正常输出
因此,echo 使用-e option 对于原始内容带有的部分需要尤其小心是否会被转义

输出my name is bob
,需要

[root@VM-165-116-centos tmp]# echo -e  my name is x27bobx27\n  
my name is  bob 

[root@VM-165-116-centos tmp]# 

© 版权声明

相关文章

2 条评论

  • 头像
    旧游如梦空肠断 读者

    可以的。但文中例子的前提是,用 echo 单引 输出内部的单引号

    无记录
    回复