温馨提示×

ubuntu aliases和函数区别

小樊
48
2026-09-05 13:23:08
栏目: 智能运维

在 Ubuntu(以及其它 Linux 发行版、类 Unix 系统)里,alias(别名) 和 shell 函数(function) 都用来“简化命令”,但它们在能力、使用场景和行为上有明显区别。


一、Alias(别名)

1. 是什么

alias 只是命令的字符串替换,在输入命令时由 shell 提前展开。

alias ll='ls -alF'

输入 ll → shell 替换为 ls -alF

2. 特点

  • ✅ 写法非常简单
  • ✅ 适合“固定命令 + 参数”
  • ❌ 不能处理逻辑、条件、循环
  • ❌ 不能接收“参数中的复杂处理”
  • ❌ 不支持多行逻辑

3. 示例

alias gs='git status'
alias ..='cd ..'
alias rm='rm -i'

4. 查看 / 删除

alias          # 查看
unalias ll     # 删除

二、Shell 函数(函数)

1. 是什么

函数是 一段可执行的 shell 脚本逻辑,可以:

  • 接收参数
  • 做判断
  • 循环
  • 调用多条命令
mkcd() {
  mkdir -p "$1" && cd "$1"
}

2. 特点

  • ✅ 支持参数 $1 $2 ...
  • ✅ 支持 if / for / while
  • ✅ 可写复杂逻辑
  • ✅ 更接近“小程序”
  • ❌ 写法比 alias 复杂

3. 示例

backup() {
  cp "$1" "$1.bak"
}
greplog() {
  grep -R "$1" /var/log
}

4. 查看 / 删除

type mkcd
unset mkcd

三、核心区别对比

对比项 alias function
是否支持参数处理 ❌ 弱 ✅ 强
是否支持逻辑控制 ❌ ✅
是否可多行 ❌ ✅
执行效率 稍快 稍慢(可忽略)
适合场景 简单命令缩写 复杂操作
是否可被覆盖命令 ✅ ✅

四、什么时候用哪个?

✅ 用 alias 的场景

  • 固定命令缩写
  • 不想敲长参数
alias ll='ls -lh'
alias pyl='python3 -m http.server'

✅ 用 function 的场景

  • 需要参数
  • 需要判断 / 创建 / 跳转
extract() {
  case "$1" in
    *.tar.gz) tar -xzf "$1" ;;
    *.zip) unzip "$1" ;;
  esac
}

五、常见坑(很重要)

1. alias 不递归

alias ls='ls --color=auto'
alias ll='ls -l'   # ll 不会自动带 color

2. alias 在非交互 shell 不生效

脚本里 默认不展开 alias

3. 函数可以覆盖命令,但要小心

cd() {
  builtin cd "$@" && ls
}

六、总结一句话

alias 是“快捷键”,function 是“小程序”

如果你愿意,我也可以帮你把现有 alias 改成函数,或写一个 .bashrc 最佳实践配置。

0 踩