Вставить учетные данные в строку HTTP?

Мне нужно вставить учетные данные пользователя в строку HTTP, чтобы я мог правильно заполнить свой файл учетных данных git в ~/.git-credentials .

Вот три переменные среды, с которых я должен начать:

 user="someUser" pass="somePass" uri="http://sometld.org/path/repo.git" 

Я возился с awk , но он будет работать только с путями клонирования в стиле Github ( https://github.com/org/repo.git ) и не будет работать с нестандартными путями ( https://git.private.org/scm/~user/path/repo.git ):

 proto=$(echo $uri | awk -F"/" '{print $1}') domain=$(echo $uri | awk -F"/" '{print $3}') repo_path=$(echo $uri | awk -F"/" '{print $4}') repo_name=$(echo $uri | awk -F"/" '{print $5}') echo "$proto//$user:$pass@$domain/$repo_path/$repo_name" # http://someUser:somePass@sometld.org/path/repo.git 

Каков наилучший / самый простой способ вставить имя пользователя и пароль в строку HTTP, чтобы я мог заполнить свой файл ~/.git-credentials ?

 $ sed -e "s^//^//$user:$pass@^" <<<$uri http://someUser:somePass@sometld.org/path/repo.git 

Это заменит // на //$user:$pass@ в строке $uri и будет работать где угодно.

В Bash конкретно:

 $ echo ${uri/\/\////$user:$pass@} http://someUser:somePass@sometld.org/path/repo.git 

выполнит ту же замену - это всего лишь ${variable/pattern/replacement} , но необходимо избежать косых черт в шаблоне, потому что мы не можем изменить разделители здесь.