使用逗号分隔的字符串作为Bash中变量的输入

时间:2015-03-22 11:12:52

标签: regex linux bash

我试图从我的热泵获取一些信息,它将所有设置放在一个长逗号分隔的字符串中。 它输出的字符串如下所示:

ret=OK,power=1,modus=4,adv=,temp1=21.0,humid=0,ds1=23.0,ds2=M,ds3=25.0,ds4=21.0,ds5=21.0

我想将这些值转换为sperate变量,以便我可以在我的bash脚本中使用它们。 自从我在bash中写了一些东西已经太久了:(任何帮助都会被贬低。

2 个答案:

答案 0 :(得分:1)

试试这个:

str='ret=OK,power=1,modus=4,adv=,temp1=21.0,humid=0,ds1=23.0,ds2=M,ds3=25.0,ds4=21.0,ds5=21.0'
IFS=, read -ra vars <<<"$str"
for v in "${vars[@]}"; do declare "$v"; done

,上的字符串拆分为数组vars,然后使用declare遍历数组以执行分配。

这里做了一些假设。例如,每个变量的名称与字符串中的值之间不能有空格。此外,它假定您的每个变量名都有效。

答案 1 :(得分:0)

您可以使用关联数组:

#!/bin/bash
input='ret=OK,power=1,modus=4,adv=,temp1=21.0,humid=0,ds1=23.0,ds2=M,ds3=25.0,ds4=21.0,ds5=21.0'

input=${input//,/ [}
input='['${input//=/]=}
eval declare -A pump=($input)

echo ${pump[temp1]}

或,没有eval

input='ret=OK,power=1,modus=4,adv=,temp1=21.0,humid=0,ds1=23.0,ds2=M,ds3=25.0,ds4=21.0,ds5=21.0'

IFS=, read -a tuples <<< "$input"
declare -A pump
for tuple in "${tuples[@]}" ; do
    pump+=([${tuple%=*}]=${tuple#*=})
done

echo ${pump[temp1]}