在 bash 变量中找到一个子字符串

zed*_*doo 4 bash

我们试图找到一个 mercurial url 的用户名:

default = ssh://someone@acme.com//srv/hg/repo
Run Code Online (Sandbox Code Playgroud)

假设总是有一个用户名,我想出了:

tmp=${a#*//}
user=${tmp%%@*}
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行中做到这一点?

Pau*_*ce. 5

假设您的字符串在这样的变量中:

url='default = ssh://someone@acme.com//srv/hg/repo'
Run Code Online (Sandbox Code Playgroud)

你可以做:

[[ $url =~ //([^@]*)@ ]]
Run Code Online (Sandbox Code Playgroud)

那么你的用户名就在这里:

echo ${BASH_REMATCH[1]}
Run Code Online (Sandbox Code Playgroud)

这适用于 Bash 3.2 及更高版本。