单独一个星号在Linux中什么意思
单独一个星号在Linux中什么意思详细介绍
在 Linux 中,单独一个星号(*)是 shell 中常用的通配符(Wildcard),主要用于匹配文件名或路径中的任意字符序列(包括空字符)。以下是其具体含义和用法:
1.
基本作用:匹配任意字符序列
- 语法:在命令(如
ls、rm、cp等)中使用时,*会被 shell 扩展为当前目录下所有符合模式的文件名或路径。- 示例:bash
*.txt*
- 示例:bash
- 匹配范围:
- 匹配任意长度的字符(包括 0 个字符,即空字符串),但默认不匹配以
.开头的隐藏文件 / 目录(如.bashrc)。若需匹配隐藏文件,需显式使用.*或设置shopt -s dotglob。
- 匹配任意长度的字符(包括 0 个字符,即空字符串),但默认不匹配以
2.
特殊场景
- 无匹配时的行为:
- 若当前目录下没有符合条件的文件,
*会被保留为字面量(除非 shell 开启了nullglob选项,此时会被忽略)。
例如,在空目录中执行ls *可能报错ls: 无法访问 '*': 没有那个文件或目录。
- 若当前目录下没有符合条件的文件,
- 在引号中的表现:
- 被引号包裹(如
*、'*'、"*")时,*会失去通配符功能,直接作为普通字符处理。
示例:bash
- 被引号包裹(如
3.
与正则表达式的区别
- 在 shell 通配符中,
*是简单模式匹配;而在正则表达式(如grep、sed中),*表示 “匹配前一个字符零次或多次”,需配合转义符(如\*)或使用扩展正则语法(如grep -E中的*)。
总结
单独的 * 在 Linux 中是通配符,用于匹配任意字符序列(非隐藏文件 / 目录),是 shell 命令中文件批量操作的重要工具。使用时需注意:
- 避免在无明确匹配目标时使用(如
rm *可能导致数据丢失)。 - 隐藏文件需额外处理(如
.*或开启dotglob)。 - 引号会禁用通配符功能。