У меня есть сценарий удара, который похож на это:
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
Но когда я выполняю это, я вижу странное диалоговое окно:
Вы видите, что существует две строки, отображенные вместо одной (каждое слово является неопознанным как значение столбца). Также это - вывод в терминале:
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"
Я получаю истинное диалоговое окно списка:
Что не так в сценарии?
При создании командной строки всегда используйте массивы. Это сохраняет большую проблему в заключении в кавычки:
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
я даже не собираюсь пытаться объяснить, что прервало исходное заключение в кавычки.: дрожь: