我想将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]}
中检索它们答案 0 :(得分:1)
您已修改IFS
,因此shell会在.
而不是空格上进行拆分。
不要那样做。
read
的特殊之处在于它可以直接为IFS
取一个“本地”值。
所以而不是
IFS=.
while read ....; do
...
done
为您可以执行的整个shell修改IFS
while IFS=. read ....; do
...
done
并且只修改内置IFS
的{{1}}。