bash字符串替换重新排列字符串?

bash字符串替换重新排列字符串?

我面临的问题是连接存储命令的变量在将其与常规字符串连接时,其行为并不像字符串。一个例子是:

base_url=$(curl -sIL --max-redirs 2 'https://hp.com' | ggrep -Po 'Location: \K(.*)$' | tail -1)
# at the time of writing this post the location is: https://www8.hp.com/us/en/home.html
test_url="https://www8.hp.com/us/en/home.html"
echo "${base_url}/subroute"
echo "${test_url}/subroute"

然后输出:

/subrouteww8.hp.com/us/en/home.html
https://www8.hp.com/us/en/home.html/subroute

我不明白为什么输出不相同。如果已经有人问过这个问题,我深表歉意,但我没有找到处理此问题的另一个问题。

答案1

在启用的情况下运行脚本set -x,您可以看到该curl命令返回带有回车符的输出:

$ ./script.sh
++ curl -sIL --max-redirs 2 https://hp.com
++ ggrep -Po 'Location: \K(.*)$'
++ tail -1
+ base_url=$'https://www8.hp.com/us/en/home.html\r'
+ test_url=https://www8.hp.com/us/en/home.html
+ echo $'https://www8.hp.com/us/en/home.html\r/subroute'
/subrouteww8.hp.com/us/en/home.html
+ echo https://www8.hp.com/us/en/home.html/subroute
https://www8.hp.com/us/en/home.html/subroute

您可以使用 bash 参数扩展来删除它:

#!/bin/bash

base_url=$(curl -sIL --max-redirs 2 'https://hp.com' | ggrep -Po 'Location: \K(.*)$' | tail -1)
base_url=${base_url/$'\r'/}
test_url="https://www8.hp.com/us/en/home.html"
echo "${base_url}/subroute"
echo "${test_url}/subroute"

相关内容