例如有这些文件:
$ ls -a
. .. a .a1 .a10 .a2 .a3 .a4 .a5 .a6 .a7 .a8 .a9
如何用通配符匹配所有隐藏文件呢,显然不能用点星.*,因为会匹配到.和..这两个目录:
$ ls .*
.a1 .a10 .a2 .a3 .a4 .a5 .a6 .a7 .a8 .a9
.:
a
..:
tmp
找了一个英文答案,是用GLOBIGNORE这个变量把.和..忽略掉:
$ GLOBIGNORE=".:.."
$ ls .*
.a1 .a10 .a2 .a3 .a4 .a5 .a6 .a7 .a8 .a9
不过,这时有点副作用。因为单个星号*也会匹配到所有隐藏文件,跟平时使用习惯不一样:
$ ls *
a .a1 .a10 .a2 .a3 .a4 .a5 .a6 .a7 .a8 .a9
如果介意,那么需要关掉dotglob这个选项:
$ shopt -u dotglob
gaory@workdesk:~/tmp/tmp[0]$ ls *
a
gaory@workdesk:~/tmp/tmp[0]$ ls .*
.a1 .a10 .a2 .a3 .a4 .a5 .a6 .a7 .a8 .a9
Done.