老男孩教育每日一题-2017-04-14-说一下单引号、双引号和不加引号区别

简介:

说一下单引号、双引号和不加引号区别

  • 总结说明:

单引号:

可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。

双引号:

特殊符号,有了原本的特殊意思$LANG  $() ``

把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。

双引号内命令或变量的写法为 `命令或变量`$(命令或变量)

无引号:

    与双引号类似,支持通配符

  把内容输出出来,可能不会将含有空格的字符串视为一个整体输出如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用,不过最好用双引号替代之。

 

范例:

##单引号

1
2
[root@oldboy32-vm1 ~] # echo '$LANG $PATH $(whichawk) {a..d}'
$LANG $PATH $( which  awk ) {a..d}

##双引号

1
2
[root@oldboy32-vm1 ~] # echo "$LANG $PATH$(which awk) {a..d}"
en_US.UTF-8 /usr/local/sbin : /usr/local/bin : /sbin : /bin : /usr/sbin : /usr/bin : /root/bin  /bin/awk {a..d}

##不加引号

1
2
3
4
5
6
[root@oldboy32-vm1 ~] # echo $LANG $PATH $(whichawk) {a..d}
en_US.UTF-8 /usr/local/sbin : /usr/local/bin : /sbin : /bin : /usr/sbin : /usr/bin : /root/bin  /bin/awka  b c d
[root@oldboy32-vm1 ~] # ls *.txt
a.txt cn.txt  oldboy_jia.txt  oldboy.txt oldgirl.txt  zh.txt
[root@oldboy32-vm1 ~] # ls "*.txt"
ls : cannot access *.txt: No such  file  or directory

工作中多用双引号,除非你有明确的特殊的需求。

  •  实践演示

 实例1:经过反引号的`date`命令,命令行测试

1
2
3
4
5
6
[root@Oldboyedu ~]$  echo  '`date`'          #### 单引号时看到啥就显示啥。
` date `
[root@Oldboyedu ~]$  echo  "`date`"         #### 双引号,如果里面是变量,会先把变量解析成具体内容再显示
Sun Mar 22 09:43:13 CST 2015
[root@Oldboyedu ~]$  echo  ` date `          #### 对于连续的字符串等内容一般不加引号也可,加双引号比较保险,推荐。
Sun Mar 22 09:43:19 CST 2015

实例2:脚本中变量定义后,调试时测试

1
2
3
4
5
6
7
[root@Oldboyedu ~]$ wxr=testchars            ###创建一个不带引号的变量
[root@Oldboyedu ~]$  echo  $wxr              ###不加引号,显示一个变量解析后的内容
testchars
[root@Oldboyedu ~]$  echo  '$wxr'            ###单引号,显示一个变量本身
$root
[root@Oldboyedu ~]$  echo  "$wxr"            ###双引号,一个变量内容,引号内可以是变量、字符串等
testchars

实例3:脚本重定义变量测试

1
2
3
4
5
6
7
[root@Oldboyedu ~]$  echo  $wxr
  
[root@Oldboyedu ~]$ wxr=this is testchars     ###不加引号无法定义。shell会把 is解释成命令。
- bash : is:  command  not found
[root@Oldboyedu ~]$ wxr= "this is testchars"
[root@Oldboyedu ~]$  echo  $wxr
this is testchars

结论:一般应用时,对于变量的定义,我们一般加双引号。

实例4grep过滤字符串例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Oldboyedu ~]$  cat  > grep .log<<EOF
> testchars
> wxr
> wxrlyy
> EOF
[root@Oldboyedu ~]$  cat  grep .log
testchars
wxr
wxrlyy
[root@Oldboyedu ~]$ wxr=testchars
[root@Oldboyedu ~]$  echo  $wxr
testchars
[root@Oldboyedu ~]$  grep  "$wxr"  grep .log
testchars
[root@Oldboyedu ~]$  grep  '$wxr'  grep .log
[root@Oldboyedu ~]$  grep  $wxr  grep .log
testchars


实例5grep过滤双引号(转义)例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@Oldboyedu ~]$  cat  >wxr.log<<EOF
"test"
test
> EOF
[root@Oldboyedu ~]$  cat  wxr.log
"test"
test
[root@Oldboyedu ~]$  grep  " wxr.log          ####直接按ctrl+d或ctrl+c 取消执行命令 
> - bash : unexpected EOF  while  looking  for  matching `"'
- bash : syntax error: unexpected end of  file
[root@Oldboyedu ~]$  grep  " wxr.log
> ^C                                                #### è停在这里等待输入
[root@Oldboyedu ~]$  grep  \" wxr.log           
"test"


实例6:特殊例子:命令行带空格字符串可以不加引号。可以不加引号的例子。

1
2
3
4
5
6
7
[root@Oldboyedu ~]$  echo  I am wxr >>wxr.txt
[root@Oldboyedu ~]$  cat  wxr.txt
I am wxr
[root@Oldboyedu ~]$  echo  "I am wxr.test"  >>wxr.txt
[root@Oldboyedu ~]$  cat  wxr.txt
I am wxr
I am wxr. test

结论:虽然不加引号可以追加内容到oldboy.txt中,生产环境中,我们习惯用""双引号替代。

实例7:特殊例子:awk调用shell变量涉及引号例子

1
2
3
4
5
[root@Oldboyedu ~]$ ett=123
[root@Oldboyedu ~]$  awk  'BEGIN {print ' $ett '}'
123
[root@Oldboyedu ~]$  awk  'BEGIN {print "$ett"}'
$ett

###提示:以上结果正好和前面的结论相反,这是awk调用shell变量的特殊用法。

1
2
3
4
5
6
7
8
9
[root@Oldboyedu ~]$ ett= 'abc'
[root@Oldboyedu ~]$  echo  $ett
abc
[root@Oldboyedu ~]$  awk  'BEGIN {print "$ett"}'
$ett
[root@Oldboyedu ~]$  awk  'BEGIN {print ' $ett '}'
  
[root@Oldboyedu ~]$  awk  'BEGIN {print "' $ett '"}'
abc

##提示:这个例子特殊了一点。有关awk调用shell变量参考:

一道实用linux运维问题大的9钟shell解答方法。

http://oldboy.blog.51cto.com/2561410/760192

  • 总结论

  1. 很多时候,总结的结论未必适合所有情况。但是,总结小结论,便于我们学习知识和对知识的深刻理解,因此推荐大家多做总结。

  2. 不要太纠结于结论,结论毕竟不是真理,知识我们学习过程的产物。就像数学里的平行线一样,在初中定义就是不相交的两条直线就是平行线,到了高中这个结论就是错的了。

 

今天是老男孩教育每日一题陪伴大家的第28天。


往期题目索引

http://lidao.blog.51cto.com/3388056/1914205


本文转自 李导 51CTO博客,原文链接:http://blog.51cto.com/lidao/1916108

相关文章
|
安全 Linux 测试技术
|
9月前
|
关系型数据库 测试技术 分布式数据库
附获奖名单|巅峰时刻,「第6届天池全球数据库大赛」圆满收官
由阿里云和英特尔主办的“第6届天池全球数据库大赛——PolarDB TPC-C性能优化挑战赛”在武汉圆满落下帷幕。历经近3个月的层层选拔、高手过招,10支队伍从全球3500多支参赛战队中脱颖而出,成功晋级大赛决赛圈。最终,「旅途愉快」队伍赢得总冠军荣誉。
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
543 5
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
人工智能 安全 开发者
由于安全风险,安全领导者考虑禁止用AI生成代码
由于安全风险,安全领导者考虑禁止用AI生成代码
|
机器学习/深度学习 存储 自然语言处理
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)
PR曲线、ROC曲线、AUC能干个啥
评判二分类分类器性能的指标有那么多,为什么PR曲线、ROC曲线、AUC值这几个用的比较多。本文从概念、代码实现方面着手进行分享。
PR曲线、ROC曲线、AUC能干个啥
|
域名解析 Kubernetes JavaScript
如何开发一个完整的Helm charts应用实例(1)
如何开发一个完整的Helm charts应用实例(1)
如何开发一个完整的Helm charts应用实例(1)
|
网络安全 PHP 数据安全/隐私保护
云主机搭建WordPress
本文介绍了云主机的优点,以及如何快速注册云主机账户,然后介绍了如何使用CyberPanel来创建云主机并启动WordPress网站。第一步:访问官网注册账号,然后激活账号,绑定结算方式。第二步:使用CyberPanel搭建WordPress,首先是启动CyberPanel应用,接着选择云主机规格后启动创建。第三步:连接CyberPanel控制面板,创建WordPress网站…
266 1
云主机搭建WordPress
|
消息中间件 移动开发 运维
小七手游:MQTT构筑运营平台与游戏端的交互通道
使用商业的微消息队列MQTT版方案后,复杂的链路与订阅关系以及推送问题全交给微消息队列MQTT版,这样简化了基础设施的建设运维,可以把精力全心全意地投入到业务上的实现。
18503 125
小七手游:MQTT构筑运营平台与游戏端的交互通道
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示(C++)
Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示(C++)
191 0