为什么以下 bash 片段不起作用?

为什么以下 bash 片段不起作用?

这个问题与 Bash 有关。以下是在终端中运行的情况:

url="http://user:[email protected]:80/"
echo $url | sed -e 's/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/'

终端输出:example.com

如何解决以下问题?

domain=$($url | sed -e 's/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/') # not working
echo $domain

答案1

管道的左侧必须是有效的 shell 命令,可将输出生成到 stdout。在 bash 中你也可以<<<这样使用:

domain=$(sed -e 's/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/' <<< "$url")

相关内容