0
我想用yad来显示项目列表,然后对每个项目执行shell命令。然而,雅德似乎产生了一个分隔符,似乎不是一个简单的空白。我需要帮助解析它的输出。如果用户selectes所有三个项目,这个bash脚本在Bash中正确解析yad输出
#!/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的前身zenity很好地合作,但它似乎与yad失败了。
呼应$items
成文本文件和读取该文本文件与猫按预期工作:在上面的脚本
echo "$items" > tmpfile
IFS=' ' read -r -a ADDR <<< `cat tmpfile`
更换IFS=' ' read -r -a ADDR <<< $items
产生预期的结果。
我在这里错过了什么?
如何将数组保存为'items =($(yad --list --separator =''--height = 600 --multiple --column =“Items”item1 item2 item3))',then'for “$ {items [@]}”中的项目;做 回声“$ item” done' – 2012-07-07 16:26:55
谢谢!这工作得很好!但是你也有一个想法,为什么原始代码不起作用?无可否认,我是一名bash初学者,但我仍然想明白问题所在。 – severin 2012-07-07 16:55:44
您应该尽量避免更改IFS,或者如果您这样做,尽快将其更改回来。否则会引起一些奇怪的意想不到的副作用。将它改为空间并不像通常做的那样冒险(将它改为换行符),但避免它或存储它并将其改回的好习惯仍然存在。 – jedwards 2012-07-07 16:58:23