一:扩张
事实上,每次敲回车键时,bahs 都会在执行命令之前对文本进行多次处理。举个简单的例子,* 作为键值表示匹配任意数量的字符,那么当出现转义时 *在命令行中,bash在执行命令之前会扩展*
echo命令用于显示文本,即将文本参数内容复制到标准输出,如下 echo ls
那么echo *.txt就会显示当前目录下所有以.txt结尾的文件名
(1) 路径名扩展
就像刚才的echo *.txt一样,利用转义来实现扩展的机制称为路径名扩展。 这个功能非常灵活,可以满足很多有键值的需求。
例如查找当前目录下所有以大写字母开头的文件或文件夹
查看usr目录下多个目录中共享目录的路径
(2) 波浪线展开
其实这个大家都知道,cd~是返回用户目录,echo~是显示用户目录
(3)算术展开
shell可以用作计算器。 算术展开遵循以下格式:$((表达式))
算术扩展支持的算术运算符如下
算术展开式只理解到这里,后续会介绍更多
(4) 大括号扩展
用过大括号扩展的人都不得不说厉害
当使用大括号扩展时,大括号内用冒号分隔的字符将被单独处理
比如我想一次性创建5个文件夹,分别是test_1_test、test_3_test、test_5_test、test_7_test、test_9_test。 一一创建太麻烦,可以用大括号展开
还有一个更神奇的用法。 如果大括号左右两边中间是..,那么就按照左右两边的规则处理
例如创建26个文件夹,文件夹名称为26个大写字母
例如,要生成 1 到 10000 之间的 10,000 个数字,可以编写 echo {1..10000} > test.txt
(5) 参数扩展
其实参数扩展,我在另一篇文章里提到过,就是如何显示环境变量,使用ech $PATH
二:报价
在第一部分中,我们谈到了$命令作为扩展关键字来扩展命令,但有时它会导致一些问题。 比如右图中,我的目的是在屏幕上显示I have $5.00,但是$满足了5html转义符,所以我开始参数扩展,但是没有这种类型的环境变量,所以替换为空字符串,所以我输出了 .00
所以为了解决这样的问题,shell提供了引用
(1)双引号
双引号是第一种引号,主要用来处理空格问题,只要文字用双引号括起来,不只是$、/,Linux中的其他特殊符号都会失去意义,也就是说,不仅参数扩展,还有算术扩展html转义符,其他扩展都会失败。
空格在命令行中有非常特殊的含义,空格开关的两个字符很可能会被当成两个参数。如果需要创建一个名为Hello World.txt的文件夹,如果是按照前面创建的方法,将创建两个文件夹
如果文件夹名称包含在双冒号中,则空格将被忽略
但注意双冒号对于参数扩展和算术扩展无效
(2) 单冒号
如果您想阻止所有扩展生效,请使用单个冒号
(3) 转义字符
相信到这里,转义字符就不用我多说了。 能读懂这类文章的人仍然不知道转义字符的作用。