The Fool
The Fool

Reputation: 20467

extract hostname with parameter expansion in a single assignment

I am trying to get the hostname for a url. I am able to do it with 2 assignments but I want to do it in a single step.

#!/usr/bin/env sh

HELM_CHART=oci://foo.bar.io/ns/chart-name

host=${HELM_CHART#*//}
host=${host%%/*}

echo "$host"
# foo.bar.io

I am not able to figure out a pattern or combination of pattern to achieve this. I read that you can combine a pattern like shown here Remove a fixed prefix/suffix from a string in Bash. I try all sorts of combinations, but I can't get it working.

Is it possible to do in a single assignment?

Upvotes: 0

Views: 124

Answers (1)

chepner
chepner

Reputation: 531420

You can't do this with parameter expansion alone. You can with a regular expression match, though. In bash,

[[ $HELM_CHART =~ ://([^/]*)/ ]] && host=${BASH_REMATCH[1]}

In POSIX shell,

host=$(expr "$HELM_CHART" :  '.*://\([^/]*\)/')

Upvotes: 1

Related Questions