Zenity перечисляют диалоговое окно от переменных

У меня есть сценарий удара, который похож на это:

column_names="--column=\"TargetDir\" --column=\"TargetPage_ID\" --column=\"TargetTitle\""
row="\"Target Dir 1\" 1 \"TargetTitle 1\""

echo "column_name is: [$column_names]"
echo "row is: [$row]"

zenity --list --title="list" $column_names $row

Но когда я выполняю это, я вижу странное диалоговое окно:

enter image description here

Вы видите, что существует две строки, отображенные вместо одной (каждое слово является неопознанным как значение столбца). Также это - вывод в терминале:

column_name is: [--column="TargetDir" --column="TargetPage_ID" --column="TargetTitle"]
row is: ["Target Dir 1" 1 "TargetTitle 1"]

Но когда я копирую распечатанные значения column_name и row в терминале таким образом:

zenity --list --title="list" --column="TargetDir" --column="TargetPage_ID" --column="TargetTitle" "Target Dir 1" 1 "TargetTitle 1"

Я получаю истинное диалоговое окно списка:

enter image description here

Что не так в сценарии?

0
задан 1 November 2016 в 18:55

1 ответ

При создании командной строки всегда используйте массивы. Это сохраняет большую проблему в заключении в кавычки:

column_names=(--column=TargetDir --column=TargetPage_ID --column=TargetTitle)
row=("Target Dir 1" 1 "TargetTitle 1")

Примечание, как только необходимые кавычки (для защиты пробелов) оставляют теперь.

При использовании массива a, "${a[@]}" развернет элементы точно, как, не вызывая проблемы с пробелом. Так:

zenity --list --title="list" "${column_names[@]}" "${row[@]}"

Попытка, работающая printf вместо echo использование Ваших исходных переменных, Вы могли бы видеть что повреждения:

printf "%s\n" $column_names $row

я даже не собираюсь пытаться объяснить, что прервало исходное заключение в кавычки.: дрожь:

3
ответ дан 28 September 2019 в 06:49

Другие вопросы по тегам:

Похожие вопросы: