,还可以利用!运算符,如[!abc],则表示除a、b、c字符外的任何一个字符等等.这些通配符主要用来实现更加精确的限制.有时候在脚本程序中实现比较严格的控制往往可以提高很好的作用.
三、通配符的使用注意事项.
虽然通过使用通配符,可以提高我们的工作下效率.但是通配符毕竟跟其他字符不同,如果使用的不好的话,是会闯祸的.特别是跟一些删除、重命名等破坏性命令一起使用的时候,更加需要注意通配符使用过程中的一些禁忌.具体的来说,笔者认为在Unix操作系统中使用通配符的禁忌主要包括如下几个方面.
是需要注意空格符的影响.如rm *.txt 与rm * .txt两个命令,他们有什么区别呢?从形式上,一下子看不出有多大的区别.不过仔细一看,我们可以看到第二个命令在通配符*号与扩展名.txt中间多了一个空格.虽然这只是一个很小的差异,但是Unix操作系统在处理的时候,可是会相差很大的.系统工程师或者用户本来想使用rm *.txt命名来删除当前目录下的所有txt文件;但是结果使用了rm * .txt命令(可能是在输入的过程中不小心在通配符*号后面多按了一个空格符).此时操作系统会把当前文件夹下的所有文件都删除.也就是说,如果在通配符*后面有一个空格的话,则其就会忽略空格后面的文本,而表示当前目录下的所有文件.为此在使用*通配符(其他通配符也一样),一定要注意这个空格特殊字符的影响.特别是在使用这些rm命令的时候,最好还是通过交互性的方式执行.如此可以确保操作操作的文件正是用户所想操作的目标文件.从而防止 错误的命令导致数据被删除,信息被修改等等难以挽回的损失.
其次需要注意不同版本之间对于通配符的支持度是不同的.如通配符[!abc]或者通配符[abc]在c shell下就是不能够识别的. 如果在编写脚本程序的时候,要尽量少用这些通用性不好的通配符. 这对脚本程序的移植性不利. 在编写脚本程序时,能够使用*或者?等通配符的,就使用这些通配符. 这些通配符基本上每个shell都是支持的.为此在脚本程序移植的过程中,就不会遇到兼容性的问题.不过要了解的是,通配符*号与通配符?号能够表示多个字符或者单个字符,而不能够对字符的范围进行进一步的限制.但是像[abc]等等通配符形式却可以实现精确的限制. 系统工程师在使用通配符的时候,仍然需要根据用户的需求来选择.如果非要采用这些通配符的话,那么最好能够在脚本程序的注释中添加相关的说明.方便下次脚本程序移植时能够一目了然的知道这个情况,及时调整策略.
第三需要注意通配符*与通配符/号使用的两个限制.在使用ls * 命令显示当前目录下的所有文件时,其是不会显示以点号开头的文件. 这类文件,在Unix操作系统中表示的是隐藏文件.出于保护的目的,默认情况下不会显示这些隐藏文件(以.号开头的文件).如果系统工程师要想显示文件的话,则 在通配符前面输入.号.其次这些通配符不能够代表目录中的/ 符号.也就是说,如果使用cd目录加通配符进行路径切换的话,则这个路径中不能够利用通配符来代表/符号.
从以上的分析中可见虽然通配符提高了我们的办公效率里,但是在使用时或多或少仍然有一些限制.作为系统工程师,要把这些限制牢记于心.无论是在编写脚本程序,还是结合其他命令使用时,需要遵守这些使用过程中的禁忌.
|