Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在Bash中使用逗号分隔的字符串作为变量的输入_Regex_Linux_Bash - Fatal编程技术网

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非常感谢,现在就去试试。这个看起来很棒,马上就可以试试。谢谢!!