当前位置:首页 > linux教程 > 列表

Unix shell 使用 Bash 中的 globstart 选项使用教程

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-21 13:05:41 浏览: 评论:0 

我们可以用一个神奇的通配符“**”(两个星号)在ls命令方便的遍历所有的目录和文件,本文我们来告诉你如何设置Bash的globstar选项后,使用这个神奇的通配符.

在使用一些命令时(如:ls、git),刚好遇到一些需求是想很方便地遍历所有的目录和文件,后来经过搜索,终于找到了一个“神奇”的通配符 “**”(两个星号),在设置了Bash的globstar选项后,**就可以匹配任当前何目录(包括子目录)以及其中的文件,所以,了解了一下 globstar这个选项,当未设置globstar时,**通配符的作用和*是相同的,而设置了globstar后,**的匹配范围不同了(更广一些),注意:globstar是Bash 4.0才引入的选项,之前的老版本是不支持的,使用“bash –version”可产看当前使用的Bash的版本.

关于glob这个词,我也觉得好奇,中文不好解释,大致就是“对通配符展开”的意思,如下的英文吧:

In shell-speak, globbing is what the shell does when you use a wildcard in a command (e.g. * or ?). Globbing is matching the wildcard pattern and returning the file and directory names that match and then replacing the wildcard pattern in the command with the matched items.

在bash的man page中,对globstar的说明提到只两次,说的都是同一件事情,代码如下:

  1. Pathname Expansion 
  2. ...... 
  3. *      Matches any string, including the null string.  When the globstar shell option is enabled,  and  *  is 
  4.               used  in  a  pathname expansion context, two adjacent *s used as a single pattern will match all files 
  5.               and zero or more directories and subdirectories.  If followed by a /, two adjacent *s will match  only 
  6.               directories and subdirectories. 
  7. ...... 
  8. globstar 
  9.         If set, the pattern ** used in a pathname expansion context will match a files and zero or more directories  
  10.         and subdirectories.  If the pattern is followed by a /, only directories and subdirectories match. 

写了个测试和学习globstar的shell脚本如下:

  1. #!/bin/bash 
  2. <pre lang="Bash"
  3. function show() 
  4.         for i in ** 
  5.         do 
  6.                 echo $i 
  7.         done 
  8. --phpfensi.com 
  9.  
  10. cd /root/jay/ 
  11. echo "------------------------" 
  12. echo "disable globstar option:" 
  13. # globstar is disabled by default 
  14. shopt -u globstar 
  15. show 
  16. echo "------------------------" 
  17. echo "enable globstar option:" 
  18. shopt -s globstar 
  19. show 

执行上面测试globstar的shell脚本,看它的输出结果,就很容易理解globstar了,如下:

  1. [root@smilejay jay]# ./test_globstar.sh  
  2. ------------------------ 
  3. disable globstar option: 
  4. dir1 
  5. dir2 
  6. file1 
  7. file2 
  8. index.html 
  9. test_shopt.sh 
  10. ------------------------ 
  11. enable globstar option: 
  12. dir1 
  13. dir1/file3 
  14. dir2 
  15. dir2/file4 
  16. file1 
  17. file2 
  18. index.html 
  19. test_shopt.sh

Tags: Unix shell globstart

分享到: