shell小技巧:URL转码表与set -euo pipefail
前言
日常写 shell 脚本时积攒的小技巧,单拎出来都不长,合在一起记录。这篇是第一批:URL 转码表和 set 选项,后续有新的继续补充。
一、常用符号的 URL 转码表
写爬虫或拼 URL 时经常碰到符号需要转码,对照表如下:
| 符号 | url 转码 |
|---|---|
| + | %2B |
| space(空格) | %20 |
| / | %2F |
| ? | %3F |
| % | %25 |
| # | %23 |
| & | %26 |
| = | %3D |
命令行里快速转码/解码:
|
|
二、set -e、set -u 与 pipefail
写脚本时经常看到开头一句 set -eu 或 set -euo pipefail,各自的作用:
set -e:脚本中任意一个命令返回了非 0 就立即退出。避免错误被吞掉后继续往下跑,把小问题滚成大事故。set -u:引用未赋值的变量视为错误,并向 stderr 输出错误信息。避免变量名打错后以空字符串静默传播。set -o pipefail:管道的返回值取最后一个失败命令的返回码(默认只取最后一个命令的)。配合-e才能捕获xxx | grep yyy这类管道中间的失败。
组合使用:
|
|
注意的坑:
set -e对if、while、||、&&中的命令不生效,需要自己判断的场景别指望它兜底- 有意容忍失败的命令用
cmd || true显式声明 - 需要「定义可能不存在的变量」时用
${var:-default}给默认值
|
|
总结
转码表贴在手边省得现查;set -euo pipefail 应该成为 bash 脚本的默认开场白——成本一行,换来的是失败尽早暴露。
- 原文作者:Anttu
- 原文链接:https://anTtutu.github.io/post/2020-12-05-shell-tips/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。