Regex 在Bash中使用逗号分隔的字符串作为变量的输入
我试图从我的热泵获取一些信息,它在一个逗号分隔的长字符串中显示所有设置。 它输出的字符串如下所示:Regex 在Bash中使用逗号分隔的字符串作为变量的输入,regex,linux,bash,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中写过任何东西了:(非常感谢您的帮助。您可以使用关联数组: #!/bin/bash input='ret=OK,power=
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中写过任何东西了:(非常感谢您的帮助。您可以使用关联数组:
#!/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]}
input='ret=OK,power=1,modus=4,adv=,temp1=21.0,潮湿=0,ds1=23.0,ds2=M,ds3=25.0,ds4=21.0,ds5=21.0'
如果s=,读取-a元组请尝试以下方法:
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
str='ret=OK,power=1,modus=4,adv=,temp1=21.0,潮湿=0,ds1=23.0,ds2=M,ds3=25.0,ds4=21.0,ds5=21.0'
IFS=,read-ra-vars非常感谢,现在就去试试。这个看起来很棒,马上就可以试试。谢谢!!