shell单引号双引号详解
linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了)
" "(双引号)与 ' '(单引号)的区别
你在shell prompt(shell 提示)后面敲打键盘、直到按下enter的时候,你输入的文字就是command line(命令行)了,然后shell才会以进程方式执行你所提交的命令。但是,你又可知道:你在command line输入的每一个文字,对shell来说,有什么类别之分呢? 简单而言,command line的每一个charactor(字符)分为如下两种: 下面的例子將有助于我们对 quoting 的了解: $ A=B C # 空白键未被关闭,作为IFS 处理。 $ A="B C" # 空白键已被关闭,仅作空白符号处理。 在第一次设定 A 变量时,由于空白键没有被关闭,command line 将被解读为: 在上例中,由于 <enter> 被置于 hard quote 当中,因此不再作为 CR 字符來处理。 上例的 <enter> 要是被置于 soft quote 中的话, CR 也会同样被关闭: 然而,由于 echo $A 时的变量沒置于 soft quote 中,因此当变量替换完成后并作命令行重组时,<enter> 会被解释为 IFS ,而不是解释为 New Line 字符。 同样的,用 escape 亦可关闭 CR 字符: 上例中,第一个 <enter> 跟第二个 <enter> 均被 escape 字符关闭了,因此也不作为 CR 來处理, 您或许发现光是一个 <enter> 鍵所产生的字符就有可能是如下这些可能: 至于 soft quote 跟 hard quote 的不同,主要是对于某些 meta 的关闭与否,以 $ 來作说明: 在第一个 echo 命令行中,$ 被置于 soft quote 中,將不被关闭,因此继续处理变量替换, --------------------------------------------------------- $ echo "'$A'" # 最外面的是双引号 ---------------------------------------------------------------- 【认真阅读文章,答案自会揭晓】 ------------------------------------------------------- 下面为扩展阅读,难度有点大,初级同学建议学懂上面的就好。以后再做拓展也可以。 *************************************************************************************** 在 CU 的 shell 版里,我发现有很多初学者的问题,都与 quoting 理解的有关。 前面我们提到的那些 meta ,都是在 command line 中有特殊用途的,
由于 { } 在 shell 中并没关闭,那 shell 就將 {print $0} 视为 command block , 要解決之,可用 hard quote :
上面的 hard quote 应好理解,就是將原本的 {、<space>、$(注三)、} 这几个 shell meta 关闭,
然而,若你要改变 awk 的 $0 的 0 值是从另一个 shell 变量读进呢? $ awk '{print $$A}' 1.txt 那是因为 $A 的 $ 在 hard quote 中是不能替换变量的。 聪明的读者(如你!),经过以上学习,我想,应该可以解释为何我们可以使用如下操作了吧: A=0 单引号和双引号都能关闭shell对特殊字符的处理。不同的是,双引号没有单引号严格,单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是①美元符号②反引号③反斜杠,这3种特殊字符不被忽略。 不忽略美元符号意味着shell在双引号内部也进行变量名替换。 下面用一个简单的shell程序要说明一下。
这是正确的lu程序,下面是运行结果。
如果lu写成①grep $1 phonebook或者②grep '$1' phonebook,就会出现下面的错误结果(为什么?)。 ①的结果:
②的结果:
———————————————————————————————— 输出结果:(思考,为什么不同?) $ A=B\ C $ echo '"$A"' # 最外面的是单引号 "$A" |
参考:http://bbs.chinaunix.net/thread-2076396-1-1.html
本文出自 “Lisp的运维之路” 博客,请务必保留此出处http://lspgyy.blog.51cto.com/5264172/1282107
shell单引号双引号详解的更多相关文章
- linux shell 单引号 双引号 反引号的区别
一.单引号和双引号 首先, 单引号和双引号,都是为了解决中间有空格的问题. 因为空格在linux中时作为一个很典型的分隔符,比如 string1=this is a string,这样执行就会报错.为 ...
- shell 单引号&双引号的使用
使用双引号: shell> X='parameter' shell> echo "Hello $X" Hello parameter 单引号中嵌套单引号: shell& ...
- centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课
centos shell基础知识 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 ...
- jquery的JSON字符串处理、单引号双引号的转换
1.jquery的JSON字符串处理 var pwdlevel_val = "{"minLength":1,"maxLength":20," ...
- python中的单引号双引号和三引号
python的单引号和双引号没有本质的区别,而三引号有两种作用:注释和换行 一. 单引号中可以包含双引号,双引号中可以包含单引号 print("好好学习,'天天向上'") 结果: ...
- php中的单引号与双引号详解
一.引号定义字符串 在Php中,通常一个字符串被定义在一对引号中,如: 'I am a string in single quotes'"I am a string in double qu ...
- php 单引号 双引号 ,php字符串/ hmtl / 数据库显示/ 及php的几个转化函数
* 以单引号为定界符的php字符串,支持两个转义\'和\\* 以双引号为定界符的php字符串,支持下列转义(\'会直接输出\' ,也会转义 \\): \n 换行(LF 或 ASCII 字符 0x ...
- C语言 单引号 双引号问题
C语言中的单引号和双引号含义迥异,用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值,因此,采用ASCII字符集的编译器而言,‘a’的含义与0141或97严格一 ...
- PHP字符串处理 单引号 双引号 heredoc nowdoc 定界符
---恢复内容开始--- 2019年2月22日09:49:54 参考文档: http://php.net/manual/zh/language.types.string.php#language. ...
随机推荐
- jstack Dump 日志文件中的线程状态(转)
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on conditio ...
- MySQL初始化与用户配置
数据库初始化 默认情况下,数据已经初始化好,数据可参见默认配置文件/etc/my.cnf 在其他位置重新初始化MySQL数据库: basedir是mysql的安装根目录,ldata是数据初始化的目录 ...
- Robot Framework(AutoItLibrary库关键字介绍)
AutoItLibrary库关键字 AutoItLibrary 的对象操作大体上有几大主要部分,Window 操作.Control 操作.Mouse 操作.Process操作.Run 操作.Reg 操 ...
- Win7与Ubuntu双系统安装过程
Win7安装1.宏基安装Win7插入Win7系统光盘-> 重新启动-> 按F12-> 选择CD安装-> 按任意键-> 选择自定义(高级),接下去根据提示安装. 2.华硕安 ...
- Golang教程:goroutine信道
在上一篇教程中,我们讨论了如何使用协程实现并发.在这篇教程中,我们将讨论信道以及如何使用信道实现协程间通信. 什么是信道 信道(Channel)可以被认为是协程之间通信的管道.与水流从管道的一端流向另 ...
- [转]NLog 自定义字段 写入 oracle
本文转自:http://www.cnblogs.com/skyapplezhao/p/5690695.html 1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴 ...
- 模仿jquery的data
jquery中,有这个方法 var obj = {}; $.data(obj,'name','jake'); console.info($.data(obj,'name')); console.inf ...
- 纯css画三角形,勾等形状
//三角形 .money-ul li.active:after { content: ""; position: absolute; bottom: 0; right: 0; bo ...
- Python-网络编程(二)
今天继续网络编程的东西 一.网络通讯原理 1.互联网的本质就是一系列的网络协议 我们是在浏览器上输入了一个网址,但是我们都知道,互联网连接的电脑互相通信的是电信号,我们的电脑是怎么将我们输入的网址变成 ...
- Postman安装及入门实践(以百度搜索为例)
一.Postman安装 可以FQ的小伙伴可以直接去官网下载:https://www.getpostman.com 如果不能,可以用我的安装包,版本找最新的:链接:https://pan.baidu.c ...