加入收藏 | 设为首页 |

什么值得买-Linux Shell 通配符、元字符、转义符最全运用攻略

海外新闻 时间: 浏览:120 次

来自:程默 - 博客园,作者:程默

www.cnblogs.com/chengmo/archive/201什么值得买-Linux Shell 通配符、元字符、转义符最全运用攻略0/10/17/1853344.html


提到shell通配符(wildcard),咱们在运用时分会经常用到。下面是一个实例:


[chengmo@localhost ~/shell]$ ls

a.txt b.txt c.old


[chengmo@localhost ~/shell]$ ls *.txt

a.txt b.txt


[chengmo@localhost ~/shell]$ ls d*.txt

ls: 无法访问 d*.txt: 没有那个文件或目录


从上面这个实例,不知道咱们有没有发现问题呢。咱们先了解一下,通配符相关常识,再剖析下这个实例吧。


一、linux shell通配符(wildcard)


通配符是由shell处理的(不是由所触及到指令句子处理的,其实咱们在shell各个指令中也没有发现有这些通配符介绍), 它只会呈现在 指令的“参数”里(它不用在 指令称号里, 也不用在 操作符上)。当shell在“参数”中遇到了通配符时,shell会将其当作途径或文件名去在磁盘上查找或许的匹配:若契合要求的匹配存在,则进行代换(途径扩展);不然就将该通配符作为一个一般字符传递给“指令”,然后再由指令进行处理。总归,通配符 实践上便是一种shell完结的途径扩展功用。在 通配符被处理后, shell会先完结该指令的重组,然后再持续处理重组后的指令,直至履行该指令。


咱们回过头剖析上面指令吧:在第2个指令中,*.txt 实践shell查找文件,找到了契合条件的文件,指令会变成:ls a.txt b.txt ,实践在履行ls 时分传给它的是a.txt b.txt .


而指令3,d*.txt 因为当时目录下面没有这样的文件或目录,直接将”d*.txt” 作为ls 参数,传给了 ls .这个时分”*” 仅仅一个一般的 ls 参数罢了,现已失去了它通配含义。 因为找不到文件,所以会呈现:无法访问提示!


了解了shell通配符,咱们现在看下,shell常见通配符有那一些了。


shell常见通配符:



需求阐明的是:通配符看起来有点象正则表达式句子,可是它与正则表达式不同的,不能彼此混杂。把通配符理解为shell 特别代号字符就可。并且触及的只要,*,? [] ,{} 这几种。


二、shell元字符(特别字符 Me什么值得买-Linux Shell 通配符、元字符、转义符最全运用攻略ta)


shell 除了有通配符之外,由shell 担任预先先解析后,将处理结果传给指令行之外,shell还有一系列自己的其他特别字符。



参加”*” 都是效果在指令名直接。可以看到shell 元字符,基本是效果在指令上面,用作多指令切割(或许参数切割)。因而看到与通配符有相同的字符,可是实践上效果规模不同。所以不会呈现混杂。


以下是man bash 得到的英文解析:


metacharacter

A character that, when unquoted, separates words.  One of the following:

|  & ; ( ) < > space tab

control operator

A token that performs a control function.  It is one of the following symbols:

|| & && ; ;; ( ) | <newline>


三、shell转义符


有时分,咱们想让 通配符,或许元字符 变成一般字符,不需求运用它。那么这儿咱们就需求用到转义符了。 shell供给转义符有三种。



man bash 英文解说如下:


There are three quoting mechanisms: the escape character, single quotes, and double quotes.


实例:


[chengmo@localhost ~/shell]$ ls *.txt

ls: 无法访问 *.txt: 没有那个文件或目录

[chengmo@localhost ~/shell]$ ls '*.txt'

ls: 无法访问 *.txt: 没有那个文件或目录

[chengmo@localhost ~/shell]$ ls 'a.txt'

a.txt

[chengmo@localhost ~/shell]$ ls *.txt

a.txt b.txt


可以看到,参加了转义符 “*”现已失去了通配符含义了。


四、shell解析脚本的进程


看到上面说的这些,想必咱们会问到这个问题是,有这么想特别字符,通配符,那么 shell在得到一条指令,抵达是怎么样处理的呢?咱们看下下面的图:



假如用双引号包含起来,shell检测跳过了1-4步和9-10步,单引什么值得买-Linux Shell 通配符、元字符、转义符最全运用攻略号包含起来,shell检测就会跳过了1-1撸死你资源网0步。也便是说,双引号 只通过参数扩展、指令代换和算术代换就可以送入履行过程,而单引号转义符直接会被送入履行过程。并且,无论是双引号转义符仍是单引号转义符在履行的时分可以告知各个指令本身内部是一体的,可是其本身在履行时是并不是指令中文本的一部分。


本系列:


Linux云核算及运维架构师高薪实战班“2019年03月04日行将开课中,120天冲击Linux运维年薪30什么值得买-Linux Shell 通配符、元字符、转义符最全运用攻略万,改变速约~~~~