2016-12-08 2 views
0

Я пытаюсь создать контрольный список Zenity из некоторых массивов. Мой текущий подход заключается в петле над массивами, построить строку и передать его в Zenity, как это:Контрольный список Zenity из строковой переменной

#!/bin/bash 

column0=("row 0") 
column1=("row 0") 

column0+=("row 1") 
column1+=("row 1") 

column0+=("row 2") 
column1+=("row 2") 

table='' 

for ((i=0; i<${#column0[@]}; i++)) 
do 
    table="$table TRUE \"${column0[$i]}\" \"${column1[$i]}\"" 
done 

echo $table 

zenity --list --checklist --width=600 --height=450 \ 
    --column="column 0" \ 
    --column="column 1" \ 
    --column="column 2" \ 
    $table 

Дело в том, что это не работает, и контрольный список все сломано, несмотря на эхо-фраза дает правильная строка. Есть ли проблема в том, как передать строку Zenity?

+0

Да, я уже пробовал это, но не повезло, проблема остается. – derkomai

+1

@ Inian Globbing здесь не проблема (хотя это может быть проблема * в зависимости от содержимого массивов); расщепление слов. – chepner

+0

@chepner: Согласен! Ура! – Inian

ответ

1

table должен быть массивом по той же причине, что и вы сделали column0 и column1 массивы: для защиты пробелов, которые являются частью каждого элемента.

column0=("row 0" "row 1" "row 2") 
column1=("row 0" "row 1" "row 2") 

table=() 
for ((i=0; i<${#column0[@]}; i++)) 
do 
    table+=(TRUE "${column0[$i]}" "${column1[$i]}") 
done 

zenity --list --checklist --width=600 --height=450 \ 
    --column="column 0" \ 
    --column="column 1" \ 
    --column="column 2" \ 
    "${table[@]}" 
+0

В этом случае двойное цитирование могло бы решить проблему правильно? ОП говорит, что это не – Inian

+0

Нет; '' $ table "' создаст аргумент * single * для 'zenity', для которого требуется один аргумент * за элемент * массива. – chepner

+0

Я могу подтвердить, что это работает, но я согласен с @Inian в его комментарии. – derkomai

Смежные вопросы