在Bash中将字符串拆分为多个变量[重复]

Posted

技术标签:

【中文标题】在Bash中将字符串拆分为多个变量[重复]【英文标题】:Split string into multiple variables in Bash [duplicate] 【发布时间】:2014-07-03 01:23:39 【问题描述】:

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

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

【问题讨论】:

GigabitEthernet1/0/13 是如何分隔的? Interface<space> 后面是什么? 是的。无论接口后面是什么 【参考方案1】:

试试这个:

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] 指的是逗号分隔字符串中的 first 字段,$myarray[1] 指的是逗号分隔字符串中的 second 字段,等等

【讨论】:

【参考方案2】:

使用 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

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

【讨论】:

如何将一个字符串拆分成一个数组变量? @Inoperable ***.com/questions/10586153/…【参考方案3】:

@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 正则表达式,可以引用任何文字文本(如果有空格,则必须引用),但不得引用正则表达式元字符。

【讨论】:

我将在这里指出我在现在已删除的冗余答案中所说的话:在这种情况下,正则表达式可能并不比字符串拆分好多少,但对其他问题很有用。

以上是关于在Bash中将字符串拆分为多个变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中将字符串拆分为字符串和int [重复]

如何在 Bash 中将字符串拆分为多行?

将字符串拆分为新列[重复]

将分隔字符串拆分为存储过程中的变量[重复]

如何在awk中将分隔字符串拆分为数组?

如何在 Windows 中将 Git Bash 拆分为多个“视图”?