单引号、双引号和不加引号区别
把内容输出出来,可能不会将含有空格的
说一下单引号、双引号和不加引号区别
总结说明:
单引号:
可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。
双引号:
特殊符号,有了原本的特殊意思,$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
|
结论:一般应用时,对于变量的定义,我们一般加双引号。
实例4:grep过滤字符串例子
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
|
实例5:grep过滤双引号(转义)例子
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
总结论
很多时候,总结的结论未必适合所有情况。但是,总结小结论,便于我们学习知识和对知识的深刻理解,因此推荐大家多做总结。
不要太纠结于结论,结论毕竟不是真理,知识我们学习过程的产物。就像数学里的平行线一样,在初中定义就是不相交的两条直线就是平行线,到了高中这个结论就是错的了。
转载于:https://blog.51cto.com/dakaige517/1922530
单引号、双引号和不加引号区别相关推荐
- ajax post 传参数加引号和不加引号的区别
1.前言 用ajax技术,type:post,data:参数列表.参数列表就是一个JSON数据,但key可以加引号,也可以不加引号,那总有区别的. 2.区别 var d2 = "two&qu ...
- linux给变量加单引号,单引号、双引号和不加引号区别
把内容输出出来,可能不会将含有空格的 说一下单引号.双引号和不加引号区别总结说明: 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么. 双引号: ...
- echo命令 单引号,双引号,不加引号和反引号 的区别
不加引号:字符串原样输出,变量会被替换.(根双引号一样,唯一的不同在于 \ 和 空格) 单引号:引号里面的内容会原封不动的显示出来(很简单,不做解释) 双引号:里面的特殊符号会被解析,变量也会被替换( ...
- grep 后加单引号、双引号和不加引号的区别
环境:VirtualBox4.1 + RedHat Linux 6 + Putty0.62 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么.单引 ...
- Shell中 单引号(‘‘) 双引号(““) 反引号(``) $() 的区别
字符串与引号 Shell 的模型就是标准的字符流过滤器模型,简单来说,就是一条命令把结果送到标准 输出,这个标准输出被连接到下一个命令的标准输入,由此来实现一系列命令之间的联动. 每一个命令的输出都是 ...
- 【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解
简要总结 不加引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等,会先把变量解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续 ...
- 单引号, 双引号,反引号的区别
单引号, 双引号,反引号的区别 区别: 区别: 单引号: 所见即所得 里面的内容会原封不动显示出来 双引号: 会解析里面的变量和特殊符号 反引号: 反引号里面的内容会被优先执行 [root@alice ...
- mysql中双引号和单引号有什么区别
mysql中双引号和单引号有什么区别 前2天看到有人问,mysql中双引号和单引号有什么区别? 希望大家可以关注下公众号,支持一下,鞠躬感谢~ 我就直接po代码和截图了,如下 select * fro ...
- shell中单引号双引号反引号的区别
本文首发于 http://blog.csdn.net/lineuman 1.shell中单引号,双引号,反引号的区别? 2.shell IFS解惑? 2017.4.19答 在shell中这几个引号的区 ...
- 使用变量时,单引号、双引号、反向单引号的区别
单引号,双引号,反向单引号的区别: 1.单引号:当变量内容用单引号('')时,对里面的命令echo和变量USER都无法识别,只识别成字符串本身,称之为强引用. 2.双引号:当变量内容用双引号(&quo ...
最新文章
- Linux 最常用命令整理,建议收藏!
- EUV光刻机全球出货量达57台
- css盒子子类继承父类哪些,css不继承父类的属性有哪些
- 吕布流水账 -- 纪念我的爱情
- 鸿蒙首饰用什么合成,天下HD鸿蒙炼炉是什么?鸿蒙炼炉讲解
- axios请求本地的json文件在打包部署到子目录域名下,路径找不到
- 发布虚拟机WEB服务 备忘
- 外媒:苹果已有条件批准京东方为iPhone 13供应OLED屏幕
- 1075 - Incorrect table definition;there can be only one auto column and it must be defined as a key
- 最新Discuz验证码和PhpWind验证码的识别
- 拓端tecdat|python缺失值处理案例分析:泰坦尼克数据
- 什么时候需要用到RCC_APB2Periph_AFIO–复用IO时钟的使用
- 【触想智能】工业平板电脑触摸屏选择分析
- Arch Linux Arm 安装Yaourt
- 【魔方攻略】斜转魔方教程(原创)
- WIN10和MAC OS双系统,调整MAC os分区给WIN10系统扩C盘
- JAVA基础试题抄录
- 基于知识图谱的多模内容创作技术
- ArcGIS Server 注册私有云存储并发布影像切片服务
- Uva 1626(区间dp)