cd - 是切换到上一次所在目录,依赖自动维护的 $oldpwd 环境变量,行为稳定、轻量且原生支持;它不是 cd .. 的同义替换,不适用于多级返回或父目录跳转。

用 cd - 就行,这是最直接、最可靠的方式,不需要装额外工具,bash/zsh 原生支持。
为什么 cd - 是首选
它不是“返回上一级”,而是“切换到上一次所在目录”,本质是读取环境变量 $OLDPWD 并跳转过去。这个变量由 shell 自动维护,每次执行 cd 后都会更新。
- 不依赖历史命令或路径解析逻辑,行为稳定可预测
- 在脚本里也安全可用(只要不是子 shell 中被覆盖)
- 比
pushd/popd更轻量,没有栈管理开销 - 和
cd ..完全不同:前者是来回跳(A→B→A),后者是单向退(A→B→C)
cd - 的常见误用和边界情况
看似简单,但几个细节容易翻车:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 如果当前是子 shell(比如你执行了
bash进入新会话),$OLDPWD可能为空,cd -会报错-bash: cd: OLDPWD not set - 执行
cd不带参数时,会跳到$HOME,这会覆盖$OLDPWD,导致下一次cd -跳回的是家目录,而不是你真正想回去的地方 - 某些终端复用场景(如 tmux pane 切换后首次
cd),$OLDPWD可能未初始化,建议先pwd确认当前路径再试 - 它只记一个“上一次”,不能像
pushd那样存多个位置
需要多级返回时别硬套 cd -
如果你在 /a/b/c/d/e,想回到 /a/b,cd - 没用——它只会带你回上一个完整路径(比如刚从 /tmp 进来,就回 /tmp)。
- 真要快速跳父级目录,优先考虑
bd工具:bd b直接跳到最近的b目录层级 - 临时应急可以用
cd ../../..,但注意..是相对路径,嵌套太深易数错 -
pushd/popd适合明确的“进→出”配对场景,比如编译前pushd build,编译完popd
真正容易被忽略的是:很多人以为 cd - 和 cd .. 是同义替换,其实它们解决的是两类完全不同的导航问题——一个是“往返跳”,一个是“向上退”。混用会导致路径预期错乱,尤其在写自动化脚本时。










