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