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

原创 2015年07月10日 15:24:00

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 shell 转义符

一些转义字符的表示的特殊意思 和echo,sed连用时: \n 表示新行 \r 表示回车 \t 表示水平的制表符 \v 表示垂直的制表符 \b 表示后退符 \a 表示“警...
  • yun90
  • yun90
  • 2014年04月11日 17:31
  • 47393

linux 转义字符

shell常见通配符   字符 含义 实例 * 匹配 0 或多个字符 a*b  a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb,...
  • zhliu1991
  • zhliu1991
  • 2014年05月18日 19:05
  • 1103

java,linux转义字符区别

java,linux转义字符区别
  • u011418717
  • u011418717
  • 2016年10月09日 16:20
  • 1396

Linux 下如何处理包含空格和特殊字符的文件名

原文:https://linux.cn/article-5777-1.html 我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母加数字的文件名最...
  • u013063153
  • u013063153
  • 2017年06月28日 13:28
  • 409

Linux Shell 通配符、转义字符、元字符、特殊字符

本文总结了通配符,元字符,转义字符的基本用法和用例。让大家对shell编程基础知识及在Linux shell中执行命令过程有个初步了解。Shell中经常使用通配符,通配符是由shell处理的,而不是具...
  • tang9140
  • tang9140
  • 2014年10月15日 17:26
  • 7851

shell 引号 转义符 通配符 特殊字符

下面内容解释hive -e "" 中为什么用四个反斜杠,而hive-CMD中只用两个反斜杠   hive -e "select split('1.2.3.4','\\\\.') from defa...
  • zhoulixin8
  • zhoulixin8
  • 2015年11月30日 15:31
  • 13786

Linux 下如何处理包含空格和特殊字符的文件名

注意:我们可能有各种类型的文件,但是为了简单以及方便实现,在本文中我们只用文本文件(.txt)做演示。 最常见的文件名例子: abc.txtavi.txtdebian.txt... ...
  • chengxuyuanyonghu
  • chengxuyuanyonghu
  • 2015年07月09日 18:06
  • 1458

linux sed命令删除特殊字符(含斜线、冒号等转义字符)

简介 sed 是一种在线编辑器,它一次处理一行内容。 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)。 接着用sed命令处理缓冲区中的内容,处理完成后,把缓...
  • xhoufei2010
  • xhoufei2010
  • 2016年12月08日 17:59
  • 10521

轻松学Linux之使用转义字符

转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( '),在Unix操作系统中有一类特殊的字符,叫做元字...
  • lcgweb
  • lcgweb
  • 2014年05月19日 19:15
  • 487

linux c 一站式学习 转义字符

部分转载于:http://www.cnblogs.com/hwl1023/p/4941670.html                     http://www.jb51.net/article/...
  • qq_21141511
  • qq_21141511
  • 2017年09月30日 08:41
  • 91
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux中的通配符、元字符、转义符
举报原因:
原因补充:

(最多只允许输入30个字)