Teddybugs
Teddybugs

Reputation: 1244

Bash : Curl grep result as string variable

I have a bash script as below:

curl -s "$url" | grep "https://cdn" | tail -n 1 | awk -F[\",] '{print $2}'

which is working fine, when i run run it, i able to get the cdn url as:

https://cdn.some-domain.com/some-result/

when i put it as variable :

myvariable=$(curl -s "$url" | grep "https://cdn" | tail -n 1 | awk -F[\",] '{print $2}')

and i echo it like this:

echo "CDN URL:  '$myvariable'"

i get blank result. CDN URL:

any idea what could be wrong? thanks

Upvotes: 0

Views: 1085

Answers (2)

tripleee
tripleee

Reputation: 189297

If your curl command produces a trailing DOS carriage return, that will botch the output, though not exactly like you describe. Still, maybe try this.

myvariable=$(curl -s "$url" | awk -F[\",] '/https:\/\/cdn/{ sub(/\r/, ""); url=$2} END { print url }')

Notice also how I refactored the grep and the tail (and now also tr -d '\r') into the Awk command. Tangentially, see useless use of grep.

Upvotes: 2

PromethiumL
PromethiumL

Reputation: 13

The result could be blank if there's only one item after awk's split. You might try grep -o to only return the matched string:

myvariable=$(curl -s "$url" | grep -oP 'https://cdn.*?[",].*' | tail -n 1 | awk -F[\",] '{print $2}')
echo "$myvariable"

Upvotes: 0

Related Questions