linux中的通配符、元字符、转义符

shell命令的构成

每条linux命令中的每一个character都是下面两种之中的一个:

- literal:普通纯文本

- 保留字:通配符、元字符、转义字符

通配符

通配符是由shell处理的(不是由所涉及到命令语句处理的。事实上我们在shell各个命令中也没有发现有这些通配符介绍), 它仅仅会出如今命令的“參数”里(它不用在命令名称里,也不用在操作符上)。当shell在“參数”中遇到了通配符时。shell会将其当作路径或文件名称去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展)。否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符实际上就是一种shell实现的路径扩展功能。在通配符被处理后, shell会先完毕该命令的重组,然后再继续处理重组后的命令,直至运行该命令。

通配符和正則表達式看起来非常像。但事实上不同,它仅仅是shell的特殊字符而已。

  • *:匹配0或多个字符
  • ?:匹配随意一个字符
  • [list]:匹配list中的随意单一字符
  • [!list]:匹配非list中的随意单一字符
  • [a1-a3]:匹配a1和a3之间的随意一个字符。如0-9,a-z
  • {string1,string2,string3...}:匹配string1,或string2或……当中的一个字符串

元字符meta

  • IFS:由<space><tab><enter>三者之中的一个组成,用来拆分command line中的word
  • CR:由<enter>产生,用来结束一条command line
  • =:赋值
  • $:变量替换
  • >:stdout
  • <:stdin
  • |:管道命令
  • &:重定向file descriptor,或将命令置于后台运行
  • `:用于替换
  • ():将命令置于nested subshell中运行,或用于运算或命令替换
  • {}:将命令置于non-named function中运行,或用于变量替换的界定范围
  • ;:在一个命令结束时。忽略其返回值,继续运行吓一条命令
  • &&:在一个命令结束时。若返回值为true。继续运行下一个命令
  • ||:在一个命令结束时,若返回值为false,继续运行下一个命令
  • !:运行history列表中的命令

转义符

当我们要关闭meta的功能时。就用到了转义符。

  • '(单引號)hard quote,凡在hard quote中的全部meta都被关闭。

  • "(双引號)soft quote,在soft quote中的大部分meta都会被关闭,但保留某些meta的功能(如$)。
  • \(反斜线)escape,仅仅有紧接在escape(跳脱字符)之后的单一meta才会被关闭。

dquote中不被关闭的meta:$,反引號`。反斜杠\

example

➜  ~  ls -d P* # 以P开头的文件
Pictures Projects Public ➜ ~ A=B C #<space>未被关闭。作为IFS处理。
zsh: command not found: C ➜ ~ A="B C" #<space>在"中被关闭,当作普通字符使用
➜ ~ echo $A
B C ➜ ~ A="B
dquote> C
dquote> " #<Enter>在"中被关闭,当作普通字符使用,因为command line没有得到CR字符,因此进入第二个shell prompt(以>符号表示)。
➜ ~ echo $A
B
C ➜ ~ A=B\ C # \使<space>的功能关闭,仅当普通空格使用
➜ ~ echo '$A' # $在squote中功能关闭。仅作literal
$A
➜ ~ echo "$A" # $在dquote中功能未关闭,作meta用
B C
➜ ~ echo \$A
$A
➜ ~

reference

http://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html

http://bbs.chinaunix.net/thread-2076396-1-1.html

linux中的通配符、元字符、转义符的更多相关文章

  1. Linux 命令行通配符及转义符的实现

    我们想对一类文件批量操作,例如批量查看硬盘文件属性,那么正常命令会是: [root@linuxprobe ~]# ls /dev/sda [root@linuxprobe ~]# ls /dev/sd ...

  2. Linux学习之管道符、重定向、通配符、转义符、环境变量

    Linux学习之管道符.重定向.通配符.转义符.环境变量 1. 输入输出重定向 输入重定向是指把文件导入命令中. 输出重定向是指把原本要输出到屏幕的数据信息写入指定文件中. a 标准输入重定向(STD ...

  3. [转帖]Linux教程(13)- Linux中的通配符和正则表达式

    Linux教程(13)- Linux中的通配符和正则表达式 2018-08-22 06:16:44 钱婷婷 阅读数 39更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文 ...

  4. Linux就该这么学:重定向,管道符,通配符,转义符,环境变量

    第三章:重定向,管道符,环境变量 3.1 输入输出重定向 定义:输入重定向是指将文件导入命令中,输出重定向是指将原本显示到屏幕的信息输出问文件.相较于输入重定向,输出重定向使用的更多,下面重点介绍输出 ...

  5. 自动化运维之shell通配符,转义符,和元字符(二)

    1 shell通配符 通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆.把通配符理解为shell特殊代号字符就可. 二.shell元字符 shell除了有通配符之外,由shel ...

  6. linux中的通配符与正则表达式

    在linux中,有通配符及正则表达式,那么什么是通配符和正则表达式,什么时候用?   通配符 它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通 ...

  7. 每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆能够看成是文件,文件又可分为:普通 ...

  8. C#学习笔记9:C#中的变量、转义符、显式转换和隐式转换

    1.变量的特性:可以重复的赋值 int a=4;  a=9; 2.常量:const int  number=10:这个常量不可变 如果你声明的变量,不想被其他人修改,那么就修饰为常量 声明在类的下面, ...

  9. Linux中通过Socket文件描述符寻找连接状态介绍

    针对下文的总结:socket是一种文件描述符 进程的打开文件描述符表 Linux的三个系统调用:open,socket,pipe 返回的都是一个描述符.不同的进程中,他们返回的描述符可以相同.那么,在 ...

随机推荐

  1. Java Socket实战之一 单线程通信基础socket

    现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用spring,其中就可以支持很多种远程连接的操作,另外jboss的remoting也是不错的选择,还有Apache ...

  2. 大纲2.3 Internet

    Internet:域名系统基础知识和配置,上网查询访问的方法,常用电子邮件的种类和收发电子邮件的方法,网络信息搜索,网络信息下载.上传的基本方法,网络信息共享方法. DNS域名系统 域名 不区分大小写 ...

  3. 错误跳转js

    <script type="text/javascript"> var t = 5; //倒计时的秒数 function showTime(){ document.ge ...

  4. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  5. Linux与Windows远程互访(使用Rdesktop与SSH)

    工作的时候经常使用Redhat系列系统,而平常娱乐文档都是在windows平台上进行.因此实现linux与windows远程互访也是很有必要的事情. 本文将介绍如何实现Linux与Windows的远程 ...

  6. 深刻领悟javascript中的exec与match方法之异同

    阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code:  var someText="web2.0 .net2.0"; ...

  7. hdu 3360 最小点覆盖 **

    题意:给你一个图,图中有宝物和保安两种元素.每个宝物需要周围的某些位置同时安放保安(如果那些位置有宝物,可以把宝物替换成保安)问你最少需要再安置多少保安,可以使所有宝物满足要求. 题意有点难懂 链接: ...

  8. VM 操作系统实例化(基于 KVM 的虚拟化研究及应用--崔泽永(2011))的论文笔记

    一.VM操作系统实例化 1.建立虚拟磁盘镜像 虚拟磁盘镜像在逻辑上是提供给虚拟机使用的硬盘, 在物理上可以是 L inux系 统内一普通镜像文件, 也可以是真实的物理磁盘或分区. 本方案设计中将虚拟机 ...

  9. Intel P6以来核心架构及对应型号、芯片组一览表

    转载或拿走使用请注明出处,谢谢! 注1:5系列以前的芯片组部分可以支持多代处理器(如部分945可以支持65nm.45nm的处理器),5系列开始此现象较少见. 注2:插座兼容性①Socket370接口处 ...

  10. mongodb用mongoose查库的对象,不能增加属性

    node + koa2 + mongodb 写了一个给前端的接口 如果不是写这个接口,这辈子都发现不了mongodb里这个大坑 mongoose 是个ODM(Object Document Mappe ...