0

我想使用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

我正在使用这个技巧将 yad 的输出解析为一个数组。它曾经与 yad 的前身 zenity 一起工作得很好,但它似乎与 yad 一起失败了。

回显$items到文本文件并使用 cat 读取此文本文件按预期工作:IFS=' ' read -r -a ADDR <<< $items在上面的脚本中替换为

echo "$items" > tmpfile
IFS=' ' read -r -a ADDR <<< `cat tmpfile`

产生预期的结果。

我在这里想念什么?

4

1 回答 1

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或此处的字符串。

于 2012-07-07T17:36:19.057 回答