一、元字符
元字符是在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元字符引用的不同效果
元字符 | \ | $ | * | ? | " | ' | ` | { | |
\ | NONE | NONE | NONE | NONE | NONE | NONE | NONE | NONE | |
' ' | NONE | NONE | NONE | NONE | NONE | NONE | NONE | NONE | |
"" | YES | YES | NONE | NONE | NONE | YES | NONE | NONE |
综合举例
echo `echo \\\z` ==> \z
grep xxyy** testfile ==> xxyy* xxyy** xxyy****
grep xxyy'\*\*\*' ===> xxyy***
转载于:https://blog.51cto.com/pandaql/328104