我想使用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`
产生预期结果。
我在这里缺少什么?
答案 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
或此处使用字符串。