bash shell元字符(通配符)

元字符是一种可以用来代表自身以外的内容的特殊字符,它们表达的是不同于字面本身的含义。

shell元字符也被称作“通配符”。

bash shell的元字符

元字符                                含义

    \                    按字面含义解释它后面那个字符

    &                   在后台处理的进程

    ;                  分隔命令

    $                   替换变量

    ?                   匹配单个字符

    [abc]             匹配这组字符中的一个

    [!abc]            匹配这组字符以外的某个字符 

    *                   匹配零个或多个字符

    (cmds)           在子shell中执行命令

    {cmds}          在当前shell中执行命令

元字符的作用

星号*:星号是一个通配符,它匹配文件名中零个或多个任意字符

      1. $ ls *

          abc abc1 abc123 file1.sh file2.sh nobody

          说明:*被展开为当前工作目录下的所有文件的名称。所有的文件名都作为参数

          传给ls并显示出来。

      2. $ ls *.sh

          file1.sh file2.sh

          说明:匹配并列出所有以零个或多个字符开头并且以.sh结尾的文件名。

      3. $ echo a*

          abc abc1 abc123

          说明:匹配所有以a开头后跟零个或多个字符的文件名,并将它们作为参数传

          给echo命令。

 

问号?:问号代表文件名中某一个单个字符。当文件名中包含一个或多个问号时,shell把问号替换为在文件名中匹配到的字符,以这种方式来完成文件名替换。

      1. $ ls

          abc1 abc2 abc12 abc13

          说明:列出当前目录下的文件。

      2. $ ls a?c?

          abc1 abc2

          说明:匹配并列出以a开头,后跟一个字符,再跟字符c和一个字符的文件名。

      3. $ ls ??

          ls:??: No such file or directory

          说明:如果找到正好由两个字符组成的文件名,就列出来。因为当前目录下没有

          名为两个字符的文件,所以这两个问号被解释为由两个字面字符“?”组成的

          文件名。如果没有找到这样的文件,就打印出一条错误信息。

      4. $ echo abc??

          abc12 abc13

          说明:扩展以abc开头后跟正好3个字符的文件名,并用echo命令显示。

      5. $ echo ??

          ??

          说明:当前目录下没有名字正好是两个字符的文件。shell找不到匹配,就把问

          号当成一个字面上的问号。

 

方括号:用于匹配包含指定字符组或字符范围内某个字符的文件名。

      1. $ ls

          abc abc122 abc2 file1.bak file2.bak nonsense nothing

          one abc1 abc123 file1 file2 none noone nowhere

          说明:列出当前目录下所有文件。

      2. $ ls abc[123]

          abc1 abc2

          说明:匹配所有包含4个字符的文件名,列出以abc开头后跟1、2或3的文件

          名。只匹配方括号中这组字符中的任一个。

      3. $ ls abc[1-3]

          abc1 abc2

          说明:匹配所有包含4个字符的文件名。列出以abc开头,后跟一个1~3之间

          数字的文件名。

      4. $ ls [a-z][a-z][a-z]

          abc one

          说明:匹配所有包含3个字符的文件名,列出由3个小写字母组成的文件名。

      5. $ ls [!f-z]???

          abc1 abc2

          说明:列出所有包含4个字符、第一个字符不是f至z之间的小写字母,后面是

          3个任意字符的文件名,这里?代表一个字符。

      6. $ ls abc12[23]

          abc122 abc123

          说明:列出文件名以abc12开头,后跟2或3的文件。

 

花括号:用来匹配一组用逗号分隔的字符串中的任一个。左花括号之前的所有字符称为前文,右花括号之后的所有字符称为后文。前文和后文都是可选的。花括号中不能包含不加引号的空白符。

      1. $ ls

          a.c b.c abc ab3 ab4 ab5 file1 file2 file3 file4 file5 foo faa fumble

          说明:列出当前目录下的所有文件。

      2. $ ls f{oo,aa,umble}

          foo faa fumble

          说明:匹配文件名以f开头,后跟括号中任一字符串(oo、aa或umble)的文件。

          若在括号中加入了空格符,则会出现错误信息。

      3. $ ls a{.c,c,b[3-5]}

          a.c ab3 ab4 ab5

          说明:匹配文件名以a开头,后跟括号中任一字符串的文件。

          花括号中允许使用方括号

      4. $ mkdir /usr/local/src/bash/{old,new,dist,bugs}

          说明:在/usr/local/src/bash目录下创建4个新目录,

          它们分别为:old,new,dist,bugs。

      5. $ chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

          说明:root用户权限将指派给/usr/ucb目录下的ex和edit文件,

          以及/use/lib目录下的文件名以ex开头,后跟1个字符,一个句点,

          一个或多个任意字符的文件名和名为how_ex的文件。

      6. $ echo fo{o,um}*

          fo{o,um}*

          说明:只要括号中出现未加引号的空格就不对括号进行扩展。

      7. $ echo {man,pap,ba}a

          mana papa baa

          说明:括号扩展不见得总是扩展文件名。本例中,括号后的字符a

          被添加到括号中的每个字符串后面并在结果中显示。

      8. $ echo post{script,office,ure}

          postscript postoffice posture

          说明:前缀是一个字符串,后跟由括号括着的以逗号分隔的字符串。

          括号扩展已被执行并在结果中显示。

 

转义字符:反斜杠用于屏蔽某一单个字符的特殊含义。被转义的字符将只代表其本身。

      1. $ ls

          abc file1 youx

          说明:列出当前目录下的所有文件(注意youx文件)。

      2. $ echo How are you?

          How are youx

          注意:shell对?执行文件名扩展。匹配当前目录下所有以you开头,

          后面有且只有一个字符的文件名,把它们替换到字符串中。

          文件名youx将被替换到字符串中,把字符串变成:How are youx

      3. $ echo How are you\?

          How are you?

          注意:在问号前面加一个反斜杠,问号就被转义了,

          这意味着shell不会把它当作通配符来解释。

      4. $ echo When dose this line \

          > ever end\?

          When does this line ever end?

          注意:在换行符前面加一个反斜杠将其转义。

          次提示符将一直出现直到字符串被换行符终止。     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值