一、bash通配符
1、’?’:匹配一个任意字符
2、’*’:匹配0个或任意多个任意字符,也就是可以匹配任何内容
3、'[]’:匹配中括号中任意一个字符。
例如:
[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
4、'[-]’:匹配中括号中任意一个字符,’-‘代表一个范围。
例如:
[a-z],代表匹配一个小写字母。
5、[^]:逻辑非,表示匹配不是中括号内的一个字符。
例如:[^0-9]代表匹配一个不是数字的字符。
其实我们在讲搜索命令find的时候曾经接触过这些通配符。
好的我们举几个例子:
[root@localhost ~]# cd /tmp/
大家都知道/tmp目录里都是临时文件,可以全部删除,那么我们进入到这个目录
[root@localhost tmp]# rm -rf *
这样就可以把这个目录下的所有文件都给删除了。
也就是说如果我们想清空一个目录里的文件,一个一个的删除显得费劲,所以我们就用通配符’*’就可以把里面的所有文件都给删除掉了,挺方便的。
但在删除之前一定要先确定是不是在当前目录下,而且一定不能错误的写成/*,这样就把根目录下所有文件都删除了,就麻烦了。
再来一个例子:
假如一个目录下有如下几个文件:
abc,abcd,1abc,1234
那么我们用ls *abc会显示那几个文件呢?
因为*代表所有内容,所以会匹配出abc,1abc两个目录,为什么abcd没有匹配出来呢?因为*abc代表后三个字符必须是abc,前面是任意字符,而abcd不符合。如果想让abcd也匹配出来那就需要这么写:
ls *abc*。
那么如果我们用ls ?abc会显示哪个文件呢?
是1abc,因为?代表必须匹配一个字符而且只能匹配一个字符,只有1abc符号要求。
ls [0-9]abc,输出1abc
ls [0-9],输出 1234
大家自己多操作联系,其实很容易理解的。
二、bash中其他特殊符号
1、”:单引号。
还是举例说明:
A、首先我们演示一下单引号和双引号的区别:
首先我们给name字符串赋值,比如:
[root@localhost ~]# name=mageo
赋值命令就是把某一个值赋给某个变量,只要调用这个变量就会输出对应的值,后面我们还会讲到,这里大家只要理解大概就可以。
然后我们用单引号来调用变量name:
[root@localhost ~]# echo ‘$name’
结果是不会输出mageo的,会原封不动的把$name输出,因为在单引号里所有特殊符号都失去了意义。
那么我们用双引号试试:
[root@localhost ~]# echo “$name”
他就会正常输出变量的值了,如图:
这就是单引号和双引号的区别。
B、我们再来举例说明反引号和$()的区别。
两个符号都是用来调用系统变量的。比如date就是系统变量,如下:
注意这个和上面的变量赋值方法不一样,前面的是把一个常量值赋值给一个变量,而这里是把一个变量又赋值给一个变量。
[root@localhost ~]# echo $abc 就会输出当前的时间。如图:
但是平时还是建议大家不要用这个符号来调用系统变量,为什么呢?其实大家应该感觉到了,就是这个符号太容易和单引号混淆,反引号就是键盘esc下面的那个键。而单引号是回车左边的键,如果混淆了就会引起没必要的麻烦。
所以建议大家用另外一个调用变量的方法,就是:$(系统变量名),如下:
[root@localhost ~]# abc=$(date)
这样我们同样可以用echo $abc来输出当前时间,如图:
我们甚至还可以这么玩:
[root@localhost ~]# echo $(ls)就会输出ls执行的结果.
[root@localhost ~]# echo “$(date)”
[root@localhost ~]# echo ‘$(date)’
大家试试,看有什么不同。
C、#代表注释一行,没什么说的。
$代表调用变量,比如想调用name变量,就必须在name前加$符号。
转义符\也非常简单,比如:
[root@localhost ~]# echo \$name
这样就不会输出变量值了,而是会像加了单引号一样原封不动输出\后面的。
因为经过\转义后$就失去了特殊符号的作用了。
大家对比一下。
这节课我们学习了通配符,*?[]
还学习了:单引号,双引号,反引号,转义符,变量引用符号等
虽然很零碎,但是只要大家多练习,还是很容易就能掌握的。
本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:http://www.ql2015.cn,谢谢!