我想使用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`产生预期的结果。
这里我漏掉了什么?
发布于 2012-07-08 01:36:19
我觉得你把事情搞得太复杂了。
这里有一个可行的替代方法。
items=`yad --list --separator='' --height=600 --multiple --column="Items" item1 item2 item3`
echo $items
for item in $items; do
echo "$item"
done这是最简单和最直接的。它拆分IFS中的元素(默认情况下包括空格、制表符和换行符)
不需要创建数组,使用read或here字符串。
https://stackoverflow.com/questions/11376641
复制相似问题