Bash 将 dbus 输出存储在数组中
Bash store dbus output in array
我想将 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 <
else
exit_error
fi
我无法解释为什么会出现以下回显命令:
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]}
中检索它们
您已修改 IFS
,因此 shell 在 .
而不是空格处拆分。
不要那样做。
read
的特殊之处在于它可以直接为IFS
取一个"local"值。
所以不用
IFS=.
while read ....; do
...
done
它修改了 IFS
整个 shell 你可以做的
while IFS=. read ....; do
...
done
并且只为 read
内置修改 IFS
。
我想将 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 <
else
exit_error
fi
我无法解释为什么会出现以下回显命令:
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]}
中检索它们您已修改 IFS
,因此 shell 在 .
而不是空格处拆分。
不要那样做。
read
的特殊之处在于它可以直接为IFS
取一个"local"值。
所以不用
IFS=.
while read ....; do
...
done
它修改了 IFS
整个 shell 你可以做的
while IFS=. read ....; do
...
done
并且只为 read
内置修改 IFS
。