0

yadを使用してアイテムのリストを表示し、すべてのアイテムに対してシェル コマンドを実行したいと考えています。ただし、yad は単純な空白とは思えない区切り文字を生成するようです。その出力を解析するのに助けが必要です。ユーザーが 3 つの項目すべてを選択すると、この 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 に答える