在Bash中将字符串拆分为多个变量

时间:2014-05-14 19:56:54

标签: bash

我有一个在下面生成的字符串:

192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1/0/13, changed state to up

如何从该字符串中取出2个变量(使用bash)?

例如我想要

$ip=192.168.1.1 
$int=GigabitEthernet1/0/13

3 个答案:

答案 0 :(得分:47)

试试这个:

mystring="192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1/0/13, changed state to up"

IFS=',' read -a myarray <<< "$mystring"

echo "IP: ${myarray[0]}"
echo "STATUS: ${myarray[3]}"

在此脚本中${myarray[0]}引用逗号分隔字符串中的第一个字段,${myarray[1]}引用逗号中的第二个字段 - 分隔字符串等

答案 1 :(得分:24)

read与自定义字段分隔符(IFS=,)一起使用:

$ IFS=, read ip state int change <<< "192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1013, changed state to up"
$ echo $ip
192.168.1.1
$ echo ${int##*Interface}
GigabitEthernet1013

确保将字符串括在引号中。

答案 2 :(得分:7)

@damienfrancois有最好的答案。您还可以使用bash正则表达式匹配:

if [[ $string =~ ([^,]+).*"Interface "([^,]+) ]]; then 
    ip=${BASH_REMATCH[1]}
    int=${BASH_REMATCH[2]}
fi
echo $ip; echo $int
192.168.1.1
GigabitEthernet1/0/13

使用bash正则表达式,可以引用任何文字文本(必须是,如果有空格),但不得引用正则表达式字符。