Bash存储dbus输出数组

时间:2015-01-09 12:32:02

标签: arrays bash return-value dbus

我想将dbus输出存储到数组中。

dbus-send --system --print-reply --dest="com.ac.comp" /com/ac/comp/IO com.ac.comp.Time.Get

执行上述命令时,我获得以下输出:

method return sender=:1.191 -> dest=:1.198 reply_serial=2
   uint16 1
   uint16 0
   uint16 0
   uint32 0

我已按照以下方式实施了我的bash:

if [ -f $file ]                     
then
    IFS=".="                    
    while read enum name ID x                           
    do 
       if [ "$enum" == "IO" ] && [ "$name" == $IOname ]
       then 
       array=($(dbus-send --system --print-reply --dest="com.ac.comp" /com/ac/comp/IO com.ac.comp.IO.Get uint16:16)) 
       fi
    done < $1                       
else
    exit_error 
fi 

我无法解释为什么以下echo命令:

echo ${array[1]} 
echo
echo ${array[2]} 
echo 
echo ${array[3]} 
echo 
echo ${array[4]} 
echo 
echo ${array[5]}
echo
echo ${array[6]}   
echo
echo ${array[7]}
echo 
echo ${array[8]}   
echo
echo ${array[9]}
echo
echo ${array[10]}  
echo
echo ${array[11]}
echo 
echo ${array[12]}  
echo
echo ${array[13]}

给出

:1

105 -> dest

:1

112 reply_serial

2
   uint16 1
   uint16 0
   uint16 0
   uint32 0

我想重用uint16和uint32值。但我在$ {array [7]} $ {array [9]} $ {array [11]}和$ {array [13]}

中检索它们

1 个答案:

答案 0 :(得分:1)

您已修改IFS,因此shell会在.而不是空格上进行拆分。

不要那样做。

read的特殊之处在于它可以直接为IFS取一个“本地”值。

所以而不是

IFS=.
while read ....; do
    ...
done

为您可以执行的整个shell修改IFS

while IFS=. read ....; do
    ...
done

并且只修改内置IFS的{​​{1}}。