别名不能带参数或逻辑判断,必须用函数实现;永久生效需写入~/.bashrc或~/.zshrc并执行source重载,否则不生效。

别名不是万能的,带参数或逻辑判断必须用函数;永久生效要靠配置文件重载,不执行 source 就白改。
临时 alias 只在当前终端有效,关掉就消失
直接在命令行输 alias ll='ls -la' 就能立刻用 ll,但新开一个终端就没了。这种写法适合快速验证别名是否拼对、命令是否真能跑通。注意单引号里不能嵌套未转义的单引号,变量也不会展开——比如 alias today='echo $DATE' 里的 $DATE 不会替换,得用双引号或函数。
永久 alias 要写进 ~/.bashrc 或 ~/.zshrc
先确认你用的是什么 shell:echo $SHELL。结果是 /bin/bash 就改 ~/.bashrc,是 /bin/zsh 就改 ~/.zshrc。用 nano ~/.bashrc 打开,在文件末尾加一行,比如:alias glog='cd /var/log/nginx'。保存后必须执行 source ~/.bashrc 才生效——这步漏掉,重启终端前都看不到效果。
别名带参数?别硬撑,直接写函数
alias 本身不支持 $1、$@ 这类位置参数。想实现 ll /tmp 这种调用,得用函数替代:
ll() { ls -la "$@"; }写进 ~/.bashrc,再 source。其中 "$@" 会原样转发所有参数,包括路径、选项、空格等。常见错误是写成 ls -la $1,这样遇到带空格的路径(如 ll "my dir")就会崩。
大量别名建议拆到 ~/.bash_aliases 单独管理
把所有 alias 行堆在 ~/.bashrc 末尾,时间一长很难维护。更清晰的做法是:创建 ~/.bash_aliases,把别名全写进去;再确保 ~/.bashrc 里有这段加载逻辑:
if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases; fi。系统默认可能没这行,得手动加。好处是别名集中、备份方便、切换 shell 时也容易迁移。
最容易被忽略的一点:别名和函数同名时,函数优先级更高;而如果某个别名覆盖了系统命令(比如 alias cp='cp -i'),它只在当前 shell 生效,子进程(如脚本里调用的 cp)不会继承——这点在写自动化脚本时尤其关键。











