bash - 将 bash 中的正斜杠添加到变量字符串输出
问题描述
这几天我一直在拉头发..非常烦人..
我知道这与 utf-8 和字符串没有输出正确的格式有关,但无法弄清楚是什么..
这是代码:
#!/bin/bash
#test
REGURL=http://bugs.ws
CHECKURL=$(curl -m 3 -sk --head "$REGURL" | grep -i "location" | awk '{print $2}')
if [[ "${CHECKURL: -1}" != *'/'* ]] # if redirected url does not contain / at end, we need to add it
then
CHECKURL+='/'
echo "$CHECKURL"
fi
这是在做一些字符替换,而不是简单地在 URL 之后添加“/”。它在没有管道 curl、grep 的情况下工作,所以我知道这是处理 grep 或 curl 的东西。
基本上结果必须在末尾有一个正斜杠,例如:http ://bugs.ws 最终会有一个https://alphaterminte.com的位置重定向,但我需要在 " 的末尾添加一个 '/' alphatermite.com”,我已经尝试了所有方法,我只是无法让正斜杠跟随变量结果..它一直用它代替 grepped 结果的第一个字符.. UGHHHH(是的,这个测试代码需要在bash中)
解决方案
is的输出curl
使用回车 + 换行结束符;unix 工具只需要换行,并将回车视为行内容的一部分。最终结果:CHECKURL
末尾有一个不正常可见的回车符,这让一切都感到困惑。
具体来说,CHECKURL
最终包含“ https://alphatermite.com<carriage return>/
”,它会打印如下内容:
https://alphatermite.com
/
...除了只有回车(没有换行)之间,“/”打印在“https”中的“h”之上。
解决方案:您可以添加| tr -d '\r'
到管道中创建CHECKURL
,但我只需awk
一步完成所有操作:
CHECKURL=$(curl -m 3 -sk --head "$REGURL" | awk '/^[Ll]ocation:/ {sub("\r", "", $2); print $2}')
说明:该/^[Ll]ocation:/"
部分使其仅打印位置(或“位置”)标题,并在打印之前sub("\r", "", $2)
删除回车符。$2
顺便说一句,我会用它来测试字符串末尾的“/”:
if [[ "${CHECKURL}" != *'/' ]]
您可以提取最后一个字符并查看它是否为“/”,或者使用通配符模式检查它是否以“/”结尾;无需两者都做。
顺便说一句,我还建议使用小写或混合大小写的变量名称,以避免意外使用许多具有特殊含义的全大写名称之一(因此会产生意想不到的后果)。
推荐阅读
- reactjs - 从下拉列表中选择选项时,如何获取已更改的对象以及新更改的值
- django - 传递给模板标签时如何使用上下文变量
- ruby-on-rails - 如何通过删除空格来压缩 html.erb 文件?
- java - 无法使用 AsyncTask 生成 url 图像
- plc - 是否可以在结构化文本中间接索引数组(IEC 61131-3 标准)
- java - Android 上的简单 MVVM 架构和 Java 上的 AndroidX
- postgresql - 无法从 pg_basebackup 恢复 postgres v11
- webforms - 如何在 Decibel Insight 中实施表单分析跟踪?
- javascript - 如何将 2 个文档(PDF 和 XFDF)从 C# .NET Core WebAPI 控制器返回到 SPA?
- excel - VBA函数用最后一个非空值填充空单元格