在 Ubuntu(以及一般的 Linux shell)中,alias(别名) 虽然方便,但确实有比较多的限制和“坑”。下面按常见场景给你系统梳理一下。
bash script.shssh user@host command示例:
# ~/.bashrc
alias ll='ls -l'
bash test.sh
# test.sh 里写 ll,会报错:command not found
✅ 解决方式:
shopt -s expand_aliases
source ~/.bashrc
alias 不支持参数位置变量
❌ 错误示例:
alias grep='grep $1 file'
✅ 正确方式:用函数
grepfile() {
grep "$1" file
}
alias 本质是“文本替换”,不适合:
❌ 不推荐:
alias x='if [ -f a ]; then cat a; fi'
✅ 用函数代替
alias 只能替换命令的第一个词
❌ 无效:
alias -rf='rm -rf' # 错误
✅ 只能:
alias rm='rm -i'
.bashrc 里的 alias 只在 bash 生效常见误区:
# 在 zsh 里用 bash 的 alias
✅ 对应文件:
~/.bashrc~/.zshrcsu 非 login✅ 解决:
source ~/.bashrc
执行顺序:
alias > function > builtin > PATH命令
示例:
alias ls='ls --color=auto'
ls() { echo hi; }
结果:ls 调用函数
\ls
command ls
/bin/ls
都会忽略 alias
sudo ll
❌ 通常失败
✅ 解决:
sudo bash -i -c 'll'
修改 alias 后:
source ~/.bashrc
否则不生效
export alias ll='ls -l' # 错误
alias 不能传递给子进程
✅ 什么时候用 alias
✅ 什么时候用 function
示例对比:
alias gs='git status'
vs
gst() {
git status "$@"
}
如果你愿意,我可以:
你更关心哪一块?