一、元字符

元字符是在SHELL中有特殊意义的字符。可以和命令结合实现一些特殊的功能。

1、与文件名有关的元字符

与文件名有关的元字符,可以使命令在处理同一组属性的文件时,生成一个具有同一特征的文件名列表。

例如:

元字符

说明

*

匹配任何数量的字符或字先口中 ,包括空字符串。例如:“ab*”表示以ab开头的任何长的字符串。

可以匹配相应位置的任何一个字符。例如:“f? ”表示匹配文件名是包括二个字符,且起始的字符为f的文件名

[……]

由方括号定义的字符集或字符范围,可以使用其中任何一个字符匹配文件名相应位置的一个字符;方括号中的字符集可以由任何字符组成,数量不限。字符可以一一列举,也可以在两个字符之间加一个减号“-”,表示一个字符范围。

[!...]或[^….]

如果方括号中的第一个字符是“!”或是“^”,它们表示的含义正好相同:都是表示匹配任何一个不属于给定字符集范围的字符;

举例:

(1)显示当前目录下,以.log结尾的文件

# ls *.log

(2)显示当前目录下,以ins起始的所有文件

#ls ins*

(3)显示当前目录下,以s起始,文件名长度为三个字符的文件

先使用命令产生一批文件

#touch {s,d,b}{1,2,3}{4,5,6}

再使用下列命令显示。

#ls s??

(4)显示当前目录下,所以以 小写字母起始的文件。

#ls [a-z]*

(5)显示当前目录下,文件名长度为,起始字符为m

# ls m??

(6)显示当前目录下,以m和s开始的所有文件

#ls [ms]*

(7) 显示当前目录下,不是以b和m、v起始文件

#ls [!bmv]* 或 #ls [^bmv]*

注:有一个问题要注意,当我们使用方括时,进行如下查范围 查找特定的文件时,例如

1、

ls [a-e]* 本意是查找,文件起始字母是a到e范围(小写字母)里的,所以有的文件上;但实际上会显示,a-e起始的,且不管大写还是小写,在这个范围里的都会显示出来。

2、我们如果是这样查找。

ls [abcde]* :这样我们就可以找出起始字母是小写a-e的所有文件,不会有大写字母开头的文件。

上述现象请使用者注意。

2、其他元字符

元字符

含义

>

重定向输出

<

重定向输入

\

转义或引用字符

{

匹配一个或一组字符

$

引用变量

'

``括号起来,执行SHELL的命令

&

后台运行

二、转义和引用

引用: 使用"\"、单引号、双引号使得元字符失去其特殊意义,称为引用

转义:在某些普通字符前,加上转义字符\,使其具有特殊意义,这些字符称为转义字符

1、转义字符

转义字符

说明

\a

生成声音提示

\b

退格符

\e

Esc字符

\f

换页符

\n

换行符

\r

回车符

\t

制表符

\v

竖向制表符

\\

反斜线

\'

单引号

\nnn

nnn为八进制表示的ASCII字符

\xHH

HH为十六进制表示的ASCII字符

\cX

Ctrl+X字符

例如;

# echo -e "\n\tCommand Menu \n\t 1. Data processing\n\t 2. Print report\n\t 3. End"

# echo -e " \x41"

2、引用元字符

(1)使用 \ 进行单个字符的引用

echo \*

echo \"hello\" ni hao

(2)使用单引号' '进行多个字符引用

echo 'we will go to ** '

echo 'this is `pwd` directory'

可以看到在单引号的作用,常见的元字符都只具有了普通字符的含义。

(3)使用双引号" " 引用字符串,可以防止部分元字符被SHELL解释,$ \ `` 还是会被SHELL解释

echo "Now , current directory is `pwd` , the logon user is **$USER**??"

三种引用方式 对SHELL元字符引用的不同效果

元字符

\$*? "'`{ 
\NONENONENONENONENONENONENONENONE 
' 'NONENONENONENONENONENONENONENONE 
""YESYESNONENONENONEYESNONENONE 

 

 

 

综合举例

echo `echo \\\z` ==> \z

grep xxyy** testfile ==&gt; xxyy* xxyy** xxyy****

grep xxyy'\*\*\*' ===&gt; xxyy***