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