☰
Bash Shell 易错点清单
2026/10/18 6:07:52 网站建设 项目流程

文章目录

  • Bash Shell 易错点清单
    • 快速索引
  • 一、💀 致命级:会丢数据或留漏洞
    • 1. `rm -rf $DIR/*` 变量未定义
    • 2. 变量含空格,删除时没加引号
    • 3. `cd` 失败却不检查,后续命令照跑
    • 4. `eval` / 拼接字符串执行
    • 5. 空字符串变量拼进路径(`set -u` 也救不了)
    • 6. `/tmp` 用固定文件名
  • 二、🔴 高危:引号、循环、退出码
    • 7. 变量不加双引号 → 单词分裂
    • 8. glob 意外展开
    • 9. `for f in $(ls)` —— 永远不要这么写
    • 10. `${arr[@]}` 不加引号
    • 11. `$*` 与 `$@` 的区别
    • 12. 赋值号两侧加空格
    • 13. `local x=$(cmd)` 吃掉命令的退出码(极隐蔽)
    • 14. `$?` 被中间命令覆盖
    • 15. `set -e` 在这些场景不生效(设计如此)
    • 16. `((i++))` 被 `set -e` 误杀
    • 17. 管道忘了 `set -o pipefail`
    • 18. `trap ERR` 在函数内不触发
    • 19. 管道 `while read` 会丢变量
    • 20. `read` 不加 `-r`,反斜杠被吃掉
    • 21. `while read` 循环里的命令抢走 stdin
    • 22. 改了 `IFS` 不还原
    • 23. `2>&1` 写反顺序
    • 24. `sudo echo x > file` 权限仍然不够
    • 25. `sudo echo $(id -u)` 拿到的不是 root
  • 三、🟠 中级:条件、文件、环境
    • 26. 文件名以 `-` 开头
    • 27. 命令替换吃掉尾部换行
    • 28. `[ ]` 里用 `==` 或数值用 `> <`
    • 29. `[ -n $var ]` 不加引号 → 恒为真
    • 30. `[[ ]]` 里正则加了引号
    • 31. `08` 被当成八进制
    • 32. `source` 脚本里的 `exit` 会退出当前终端
    • 33. `echo` 行为跨 shell 不一致
    • 34. cron 环境 PATH 过窄
    • 35. 循环里反复调用外部命令
  • 四、🟡 低级但很烦
    • 36. locale 影响 `sort` / `awk`
    • 37. `${#str}` 对中文是字符还是字节
    • 38. 后台子 shell 不会继承 `trap`
    • 39. alias 在非交互 shell 里不生效
    • 40. 相对路径依赖当前目录
    • 41. 空数组 + `set -u`(bash 4.2 特有)
    • 42. `return` 用在函数外
  • 五、防坑速查:脚本骨架
  • 六、一条命令自查

Bash Shell 易错点清单

环境:CentOS Linux 7.9.2009| Shell:GNU bash 4.2.46(2)-release
共42 条,按危险程度分级。标注「实测」的条目均在本机跑过并附真实输出。


快速索引

#易错点等级一句话后果
1rm -rf $DIR/*变量未定义💀 致命从根目录开始删
2变量含空格却不加引号删除💀 致命删错文件
3cd失败不检查继续删💀 致命

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询