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. ...
随机推荐
- 溶解shader
玩神界原罪2,感觉人物被建筑遮挡时,建筑的“溶解”效果很有意思,想实现一下.然后发现连溶解都没实现过,emmmmm....先来把溶解实现了~ 原理就是根据一张噪声图的值是否大于某个阈值,来判断是否丢弃 ...
- OpenCV文本图像的旋转矫正
用户在使用Android手机拍摄过程中难免会出现文本图像存在旋转角度.这里采用霍夫变换.边缘检测等数字图像处理算法检测图像的旋转角度,并根据计算结果对输入图像进行旋转矫正. 首先定义一个结构元素,再通 ...
- 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
(十)保护模式下的栈 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B ;加载堆栈段选择子 mov ss,cx mov esp,0x7c00 ...
- 解决WORD2013输入时光标老跳的问题
Word2013有一个非常影响使用的bug.就是在编辑文档时,光标会乱跑,影响输入.微软给出了一个kb2863845 160多MB的补丁包,安装完成后就可以解决这个问题. 补丁下载链接: 链接:ht ...
- Firebird 列可空非空修改
2018-12-04 至少到Firebird 3.0.4 已经添加了设置可空 和 非空的语法:如 -- 删除非空(设置为可空) ALTER TABLE TECH ALTER label drop NO ...
- plpgsql insert 性能 测试
有时需要执行一些sql脚本,带逻辑控制语句,又不想用高级语言C#.Java之类的,可以直接用plpgsql,类似于Oracle的plsql. do language 'plpgsql' $$ decl ...
- centos6.x硬件信息统计脚本
#!/bin/bash Line='===========' #linux发行版名称 if [[ -f /usr/bin/lsb_release ]]; then OS=$(/usr/bin/lsb_ ...
- Java如何实现form表单提交的数据自动对应实体类(源码)
原文出自:https://blog.csdn.net/seesun2012 原生Java+JQuery form表单serializeArray提交自动对应java实体,这是一个实际的例子: html ...
- What is the difference between modified duration, effective duration and duration?
Macaulay Duration (traditionally just called Duration) The formula usually used to calculate a bond' ...
- input textbox tag
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAb8AAAB0CAIAAACaKavmAAAJ0klEQVR4nO3dO2wb5wHA8YOHIkOLrk