在 Linux 的 shell alias(别名)本身是不支持参数和通配(wildcard)展开的。也就是说:
例如下面这样是不行的:
alias rm='rm -i *'
这个 alias 只会把 rm 变成 rm -i *,* 不会被当成“你后面输入的参数”,而是字面量。
也不能这样:
alias grep='grep --color=auto $1' # ❌ 不支持 $1
alias 的工作方式是:
命令开头匹配到 alias → 直接替换文本 → 再执行
它:
如果你想“带参数 / 通配”,用 shell 函数:
rm() {
command rm -i "$@"
}
或者带通配:
clean() {
rm -i "$@"
}
调用时:
clean *.log
alias ll='ls -lh'
alias grep='grep --color=auto'
alias rm='rm -i'
| 功能 | alias | function |
|---|---|---|
| 固定参数 | ✅ | ✅ |
| 使用 $1 $@ | ❌ | ✅ |
| 通配符动态处理 | ❌ | ✅ |
如果你愿意,可以告诉我你想用 alias 实现什么具体命令,我可以直接帮你改成正确写法。