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. ...
随机推荐
- Git版本回退和撤销修改
版本回退: 在实际工作中,我们会不断对文件进行修改,然后不断提交修改到版本库里,一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失. ...
- 使用vmware虚拟机安装linux
- 我的Python升级打怪之路【六】:面向对象(二)
面向对象的一些相关知识点 一.isinstance(obj,cls) 检查实例obj是否是类cls的对象 class Foo(object): pass obj = Foo() isinstance( ...
- Android ListView分组显示
ListView的实现方法也是普通的实现方法.只不过在list列表中加入groupkey信息.在渲染的时候要判断是否是分组的标题. 就是在使用不同的两个View的时候存在这种情况,convertVie ...
- Unity游戏接入Steam成就
在接入Steam成就,其实有些地方是有坑点的,而且steam官网给的是c++代码的接入教程.如果是老鸟的话,接入还并不是很难. 但是对于新手其实还是比较痛苦的,网上这方面的资料很少.这里我给总结下,u ...
- log4j的PatternLayout参数含义
参数 说明 例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字空间 ...
- zato集群部署
注: SQL ODB和Cluster’s config需要首先依次创建,其他三个次序随意 对不熟悉的命令,使用server create *** -h 查看帮助文档 修改完后配置文件,要重启(zato ...
- ElasticSearch深入搜索
一. 结构化搜索 结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作.比较常见 ...
- jQuery ajax async
jQuery 同步调用: jQuery.ajax({ type:'POST', async: false, url:'qcTask/add', contentType:'application/jso ...
- Storm框架入门
1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology.但是Job在运行结束之后会自行结束,Topolo ...