bash中使用echo拼接URL变量时末尾变量出现在输出开头如何解决
异常原因
核心是latest_version变量末尾残留了回车符(\r,ASCII编码0x0D):
- HTTP协议的响应头默认以
\r\n作为换行分隔符,你通过curl获取响应头、用cut切割内容时,只过滤掉了换行符\n,把\r留在了latest_version的末尾 - 终端输出时遇到
\r会将光标复位到当前行的行首,后续拼接的/${FILENAME}内容就会从行首开始覆盖已经输出的前半段URL,最终呈现出FILENAME跑到开头的异常效果
解决方法
直接在获取latest_version的步骤中删除残留的\r即可,常用实现有两种:
- 管道追加
tr命令直接删除所有回车符:
latest_version="$(curl -LIs "${REPO_URL}/releases/latest" | grep -i '^location:' | cut -d' ' -f2 | cut -d'/' -f8 | tr -d '\r')"
- 用bash原生参数替换清除变量末尾的回车符:
# 拿到原始变量后追加一行处理即可 latest_version=${latest_version%$'\r'}
你也可以执行od -c <<< "$latest_version"命令查看变量的原始字节,验证\r的存在。
内容的提问来源于stack exchange,提问作者Skullfurious
相关产品推荐
相关产品推荐

