详解Linux中关于引号的那些事
本文详细的给大家介绍了关于Linux中引号的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:
引号
我们将把编写脚本的事情暂时搁在一边,然后来讨论一些,我们一直在用的,但是没有解释的东西。引号在这一节里面,我们会讲述引号。引号有两个作用:
- 控制字符替换 和
- 执行将单词包含在一起的功能
我们已经使用过引号。在我们的脚本里面,将文本信息赋值给常量的赋值操作就使用了引号:
在上面这个例子中,文本信息是被双引号包括住的。我们使用双引号的原因是—我们要把所有单词包括住,当作一个整体来对待。如果我们没有使用引号,那么bash解释器,就会将所有位于第一个单词后面的单词,解释为其他的命令(第一个单词被解释为命令)。
尝试一下运行下面的命令,看看有什么效果出来:
单引号和双引号
shell解释器可以识别双引号和单引号。 下面的复制表达式效果是等价的:
然而,在双引号和单引号之间存在一个重要的差别。 单引号,在字符替换方面有限制。 正如我们在上一节所看到的内容一样,你可以将一个变量放在双引号里面,而shell解释器依然会对变量执行字符替换的操作。
我们可以通过使用echo
命令来查看这种效果:
如果我们将上述的双引号改为单引号,那么,行为将会改变:
双引号并没有限制—以”$”开头的变量的字符替换,不过,它的确对通配符的扩展效果进行了限制。
比如,下面这个例子:
引用单个字符
还有另外一种引用字符你会碰到的。 它就是反斜杠。The backslash tells 反斜杠告诉shell解释器忽略反斜杠符后面的第一个字符。比如:
通过使用反斜杠符,shell解释器忽略了对””符号进行解释。既然shell已经忽略了””,那么,shell解释器也就不会对
下面,给出一个更有用例子:
正如你所看到的,通过使用反斜杠符号,我们可以将双引号包含在文本里面。
反斜杠的其他使用技巧
如果,你阅读过任何软件的使用手册,并且这手册是由GNU项目完成的,那么,你会发现,在软件的命令选项中,除了以一个下划线_加一个字母的形式出现之外,还有,以两个下划线加一个完整的单词的形式出现。例如,下面两个语句是等价的:
为什么在软件中,这两种形式都是支持的呢?短的那种形式,是专门为那些懒的输入员而设定的,而长的那种形式,是专门为写脚本而存在的。我有时候,是混合着使用上面的两种形式,然后,我发现采用长的命令选项有用,如果,我写了一个脚本,并且,我将在几个月后去阅读它。看到长的命令选项,有助于我理解这个命令选项是什么意思,从而省却我去查man手册的功夫。现在多敲几下键盘,会以后节省很多功夫。 这样,懒惰的原则就保持住了。
你有可能会疑虑,使用长的命令形式,会导致一个单独的命令变得很长。 为了与这个问题斗争,你可以使用反斜杠来让shell解释器忽略换行符号,正如下面的操作:
这样使用反斜杠,可以让我们将每行的内容包含在一个单独的命令中。让这个技巧可以应用,要注意的地方:换行,必须在反斜杠后面马上出现(也就是,在输入了反斜杠之后,就必须换行了)。 如果,你将一个空格符放置在反斜杠后面,那么,空格符号会被忽略,而不是换行符被忽略。反斜杠符,也可以被用于,将特殊的符号插入到文本。special characters into our text. 这些符号,被叫做—转移字符,下面就有一些转移字符:
转义字符 ………………….. |
名字 |
可能的用途 |
---|---|---|
n |
换行符 |
添加空白行在文本中 |
t |
制表符 |
将水平制表符添加到文本中 |
a |
提醒 |
让你的终端发出嘟嘟声。 |
反斜杠 |
插入一个反斜杠符 |
|
f |
formfeed |
Sending this to your printer ejects thepage |
转移字符的应用很常见。非常常见转移字符,这个想法,首先出现在C语言里面。编程语言今天,shell解释程序,C++,perl,python,awk,tcl和其他程序语言都使用了转移字符这个概念。通过使用echo命令的-e选项,我们将展示上述转移字符的应用:
- 帝国cms如何调用栏目别名作为分类标题?[!--classname--]标签不能用
- 高级软件工程师(面试题)
- 高级软件工程师 2016-9月更新
- Httpclient 调用 HTTPS 加密通道的Restful服务
- 使用 Jersey 调用 Restful 服务
- 【学术】将吴恩达的第一个深度神经网络应用于泰坦尼克生存数据集
- 使用 HttpClient 调用 Restful 接口
- 元宵佳节:看Oracle技术粉们用SQL画团圆
- java 脚本引擎
- 不怕学不会 使用TensorFlow从零开始构建卷积神经网络
- 微信公众平台增加批量获取用户基本信息接口
- 谈网络适配器
- 【框架】为降低机器学习开发者门槛,苹果发布了Turi Create框架
- 新闻数据库分表案例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 通吃岛屿问题
- 堂妹问我:Dubbo的服务暴露过程
- LeetCode 657. 机器人能否返回原点
- ! [rejected] master -> master (fetch first)
- Mybatis源码学习(二)Mapper动态代理
- Mybatis源码学习(三)executor
- Mybatis源码学习(四)拦截器与插件原理
- SpringBoot如何使用注解装配Bean
- Spring Boot 如何快速实现定时任务
- Django 实现文件上传下载API
- 【原创】Spring Boot 如何手写stater
- 【原创】Spring Boot 过滤器、监听器、拦截器的使用
- 关于useState的一切
- 关于useEffect的一切
- (25)Bash数值运算与运算符