在 Ubuntu(以及其它 Linux 发行版、类 Unix 系统)里,alias(别名) 和 shell 函数(function) 都用来“简化命令”,但它们在能力、使用场景和行为上有明显区别。
alias 只是命令的字符串替换,在输入命令时由 shell 提前展开。
alias ll='ls -alF'
输入 ll → shell 替换为 ls -alF
alias gs='git status'
alias ..='cd ..'
alias rm='rm -i'
alias # 查看
unalias ll # 删除
函数是 一段可执行的 shell 脚本逻辑,可以:
mkcd() {
mkdir -p "$1" && cd "$1"
}
$1 $2 ...backup() {
cp "$1" "$1.bak"
}
greplog() {
grep -R "$1" /var/log
}
type mkcd
unset mkcd
| 对比项 | alias | function |
|---|---|---|
| 是否支持参数处理 | ❌ 弱 | ✅ 强 |
| 是否支持逻辑控制 | ❌ | ✅ |
| 是否可多行 | ❌ | ✅ |
| 执行效率 | 稍快 | 稍慢(可忽略) |
| 适合场景 | 简单命令缩写 | 复杂操作 |
| 是否可被覆盖命令 | ✅ | ✅ |
alias ll='ls -lh'
alias pyl='python3 -m http.server'
extract() {
case "$1" in
*.tar.gz) tar -xzf "$1" ;;
*.zip) unzip "$1" ;;
esac
}
alias ls='ls --color=auto'
alias ll='ls -l' # ll 不会自动带 color
脚本里 默认不展开 alias
cd() {
builtin cd "$@" && ls
}
alias 是“快捷键”,function 是“小程序”
如果你愿意,我也可以帮你把现有 alias 改成函数,或写一个 .bashrc 最佳实践配置。