0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

inux shell通配符、元字符、转义符最全使用攻略

马哥Linux运维 来源:lq 2019-02-15 14:10 次阅读

说到shell通配符(wildcard),大家在使用时候会经常用到。下面是一个实例:

[chengmo@localhost ~/shell]$ls

a.txtb.txtc.old

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

a.txtb.txt

[chengmo@localhost ~/shell]$lsd*.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元字符(特殊字符 Meta)

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:

|| & && ; ;; ( ) |

三、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.txtb.txt

可以看到,加入了转义符 “*”已经失去了通配符意义了。

四、shell解析脚本的过程

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

如果用双引号包括起来,shell检测跳过了1-4步和9-10步,单引号包括起来,shell检测就会跳过了1-10步。也就是说,双引号 只经过参数扩展、命令代换和算术代换就可以送入执行步骤,而单引号转义符直接会被送入执行步骤。而且,无论是双引号转义符还是单引号转义符在执行的时候能够告诉各个命令自身内部是一体的,但是其本身在执行时是并不是命令中文本的一部分。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10986

    浏览量

    206712
  • Shell
    +关注

    关注

    1

    文章

    357

    浏览量

    22901
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14628

原文标题:Linux Shell 通配符、元字符、转义符最全使用攻略

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux中makefile和shell的区别

    ${PATH}引用的是Makefile中的变量,而不是shell中的PATH环境变量,后者引用的是Shell中的PATH环境变量。3、通配符区别shell
    发表于 09-22 14:29

    史上最全Python数据类型详解

    声明字符串三引号:内容中同时包含单双引号,适合使用三引号声明字符转义字符:通过某种特定的格式使得字符的意义发生改变,这就是
    发表于 06-15 14:57

    Linux Shell系列教程之Shell字符串用法

    ,”//”表示替换所有,当查找中出现了:”/”请加转义”\/”表示。好了,以上就是Shell字符串的一些基本概念和常用命令,希望大家能够熟练掌握。
    发表于 08-29 16:01

    Linux Shell系列教程之Shell printf命令详解

    声明由两部分组成:百分比符号(%)和指示。  最常用的格式指示有两个,%s用于字符串,而%d用于十进制整数。  格式字符串中,一般字符
    发表于 09-03 13:47

    [转]Linux通配符与特殊符号知识大全汇总

    原作出处:https://www.oldboyedu.com/zuixin_wenzhang/index/id/276.html符号作用Linux通配符*匹配任意(0个或多个)字符字符串,包括
    发表于 09-13 14:11

    linux的shell常见通配符转义

    字符含义实例*匹配 0 或多个字符a*ba与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。?匹配任意一个字符a?ba与b之间必
    发表于 07-19 07:11

    shell中的三种引用符号是什么

    shell中的三种引用符号1.转义2.单引号3.命令替换三、变量表达式总结一、变量1.特殊符号特殊符号~:用户主目录、:反引号,放置的命令可先执行的指令,与$(指令)功能相同#:
    发表于 12-22 07:01

    通配符的英文显示相关资料分享

    英文显示大家可能会遇到通配符英文显示有问题,比如图中显示问号有两个方面的原因,我们要去检查原因一通配符所用的字体,没有加载a-z,A-Z,所用系统无法显示,我们要去字体那里检查一下。如图所示,加上
    发表于 01-18 07:26

    Python 转义字符的5种表示方法

    ,比如制表、响铃这种。为了能将那些特殊字符都能写入到字符串变量中,就规定了一个用于转义字符 \ ,有了这个
    发表于 04-11 15:18

    MySQL利用通配符进行复杂的数据操作

    的一部分特殊字符。搜索模式(search pattern) 由字母值,通配符两租组合构成的搜索条件。通配符是SQL的WHERE子句中的特殊含义字符,子句中使用
    发表于 11-03 14:56

    请问什么是通配符通配符范围?

    数字字符串。当我显示“30TH”或数字“2020”之类的字符串时,它无法显示通配符缓冲区第 30 = 10通配符缓冲区 2020 = 5我的代码像:oxyDateArr[29]= &q
    发表于 01-31 08:13

    c语言中的转义字符

    所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加“\”来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符
    发表于 11-15 14:34 3921次阅读
    c语言中的<b class='flag-5'>转义</b><b class='flag-5'>字符</b>

    C语言转义字符和格式控制符参考文档

    本文档内容介绍了基于C语言转义字符和格式控制符参考文档,供参考
    发表于 03-30 16:01 8次下载

    Python转义字符使用总结资料免费下载

    本文档的主要内容详细介绍的是Python转义字符使用总结资料免费下载主要内容包括了:Python转义字符,Python字符串运算符,Pyth
    发表于 01-17 17:24 6次下载
    Python<b class='flag-5'>转义</b><b class='flag-5'>字符</b>使用总结资料免费下载

    转义字符\n

    三引号能够实现换行功能;在Python中,像 \n 这样的字符我们称为转义字符
    的头像 发表于 02-23 14:49 1174次阅读
    <b class='flag-5'>转义</b><b class='flag-5'>字符</b>\n