在Bash中正确解析yad输出

时间:2012-07-07 16:15:17

标签: bash shell

我想使用yad来显示项目列表,然后对每个项目执行shell命令。但是,yad似乎产生了一个似乎不是简单空格的分隔符。我需要帮助解析其输出。如果用户选择所有三个项目,则使用此bash脚本

#!/bin/bash
items=`yad --list --separator='' --height=600 --multiple --column="Items" item1 item2 item3`

echo $items

IFS=' ' read -r -a ARRAY <<< $items
for item in "${ARRAY[@]}"; do
        echo "$item"
done

应输出

item1 item2 item3
item1
item2
item3

相反,脚本只输出:

item1 item2 item3
item1

我使用this trick将yad的输出解析为数组。它曾经与yad的前辈zenity很好地配合,但它似乎与yad失败。

$items回送到文本文件中并使用cat阅读此文本文件按预期工作:使用

替换上述脚本中的IFS=' ' read -r -a ADDR <<< $items
echo "$items" > tmpfile
IFS=' ' read -r -a ADDR <<< `cat tmpfile`

产生预期结果。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

我认为你使这比必要更复杂。

这是另一种有效的方法。

items=`yad --list --separator='' --height=600 --multiple --column="Items" item1 item2 item3`

echo $items

for item in $items; do
        echo "$item"
done

这是最简单,最直接的。它拆分了IFS中的元素(默认情况下,这包括空格,制表符和换行符)

无需创建数组,使用read或此处使用字符串。