我们试图找到mercurial网址的用户名:
default = ssh://someone@acme.com//srv/hg/repo
假设总有一个用户名,我想出了:
tmp=${a#*//}
user=${tmp%%@*}
有没有办法在一行中做到这一点?
答案 0 :(得分:4)
假设你的字符串是这样的变量:
url='default = ssh://someone@acme.com//srv/hg/repo'
你可以这样做:
[[ $url =~ //([^@]*)@ ]]
然后您的用户名就在这里:
echo ${BASH_REMATCH[1]}
这适用于Bash版本3.2及更高版本。
答案 1 :(得分:3)
你几乎需要更多的声明或呼唤外部工具。我认为sed最适合这个。
sed -r -e 's|.*://(.*)@.*|\1|' <<< "$default"
答案 2 :(得分:0)
不在bash内部。您必须委托外部工具,如sed。
答案 3 :(得分:0)
不熟悉mercurial,但是使用你的网址,你可以做到
echo 'ssh://someone@acme.com/srv/hg/repo' |grep -E --only-matching '\w+@' |cut --delimiter=\@ -f 1
可能不是两个管道最有效的方法,但有效。