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"

おすすめ記事