简短结论:
CentOS 中默认的 alias 不支持通配符(*、? 等)作为参数匹配或扩展使用。
下面分层说明一下原理和常见误解。
在 CentOS(以及大多数 Linux)中:
*、?)是由 shell 在命令执行前展开的例如:
alias rm='rm -i'
当你执行:
rm *.txt
实际执行的是:
rm -i *.txt
✅ 这里 *.txt 是 shell 展开的,不是 alias 处理的。
alias clean='rm -f *.log'
执行 clean 时:
*.log 会被 当前 shell 展开clean 时的目录⚠️ 这不叫“alias 支持通配符”,而是 shell 常规行为
# 错误示例(不会工作)
alias d='docker rm *'
alias 无法:
$1 $2drm() {
docker rm "$@"
}
或带通配:
clean() {
rm -i -- *.log
}
函数支持:
| 功能 | alias | shell 函数 |
|---|---|---|
| 支持通配符 | ❌(不处理) | ✅ |
| 处理参数 | ❌ | ✅ |
| 条件判断 | ❌ | ✅ |
| 简单命令替换 | ✅ | ✅ |
CentOS 的 alias 不支持通配符作为参数匹配或扩展,通配符是由 shell 展开的;需要通配或参数处理时,应使用 shell 函数。
如果你有具体使用场景(比如 rm / docker / git 等),我可以帮你写一个更合适的函数或 alias。