我试图从我的热泵获取一些信息,它将所有设置放在一个长逗号分隔的字符串中。 它输出的字符串如下所示:
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中写了一些东西已经太久了:(任何帮助都会被贬低。
答案 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]}