Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从字符串中提取子字符串_Bash_Shell - Fatal编程技术网

Bash 从字符串中提取子字符串

Bash 从字符串中提取子字符串,bash,shell,Bash,Shell,我不熟悉shell编程 我有一个db连接的字符串表示,如下所示: <user>:<password>@<host> :@ 我想从字符串中提取每个属性(用户、密码和主机)。一种简单的方法是: $ IFS=:@ read -a args <<< "<user>:<password>@<host>" $ echo ${args[0]} <user> $ echo ${args[1]} <pa

我不熟悉shell编程

我有一个db连接的字符串表示,如下所示:

<user>:<password>@<host>
:@

我想从字符串中提取每个属性(用户、密码和主机)。

一种简单的方法是:

$ IFS=:@ read -a args <<< "<user>:<password>@<host>"
$ echo ${args[0]}
<user>
$ echo ${args[1]}
<password>
$ echo ${args[2]}
<host>

$IFS=:@read-a argsBash字符串操作可以按如下方式完成:

input="<user>:<password>@<host>"
colonPos=$(expr index "${input}" ':')
atPos=$(expr index "${input}" '@')
user=${input:0:$colonPos-1}
pass=${input:$colonPos:$atPos-$colonPos-1}
host=${input:$atPos}
echo -e "input: ${input}\nuser: ${user}\npass: ${pass}\nhost: ${host}"

让我们使用
if-then-elif-else-fi
使用那些
*Amount
变量在bash中开发您自己的解析器

很好,谢谢。是的,uid和pwd将不包含这些分隔符
tmpStr="${input//[^\:]/}"
colonAmount=${#tmpStr}
tmpStr="${input//[^@]/}"
atAmount=${#tmpStr}
echo -e "colon(s) amount: ${colonAmount}\nat(s) amount: ${atAmount}"