Переменная как несколько параметров команды игнорировать кавычки в Bash - PullRequest
0 голосов
/ 10 января 2020

Я хочу вставить переменную (в основном текстовый файл для чтения) в тело команды как несколько параметров, но это не работает, потому что переменная не разрешена должным образом.

Моя переменная

MAIN_MENU="1 'Create new image' 2 'Start image as overriding' 3 'Start image as snapshot' 4 'Install OS' 5 'Settings'"

Эхо:

echo $MAIN_MENU
1 'Create_new_image' 2 'Start_image _as_overriding' 3 'Start _image_as_snapshot' 4 'Install_OS' 5 'Settings'

Именно этого я и ожидаю, и если я скопирую результат эха (вручную) в параметры команды, как показано ниже, это сработает.

dialog --title "Title" --menu 'Choose operation:' 0 0 5 1 'Create new image' 2 'Start image as overriding' 3 'Start image as snapshot' 4 'Install OS' 5 'Settings'

В этом случае параметры ... 1; Создать новое изображение; 2; Начальное изображение как переопределенное ...

Однако, когда я вставляю параметры в качестве переменной, он полностью игнорирует одинарные кавычки ..

MAIN_MENU="1 'Create new image' 2 'Start image as overriding' 3 'Start image as snapshot' 4 'Install OS' 5 'Settings'"
dialog --title "Title" --menu 'Choose operation:' 0 0 5 $MAIN_MENU

По существу, оставляя одинарные кавычки, но также разделяя параметры пробелами.

В этом случае параметры ... 1; 'Создайте; новый; образ'; 2; 'Начните; образ; в виде; overriding '; ...

Никакая замена котировок не привела к желанным результатам для меня.

1 Ответ

0 голосов
/ 10 января 2020

После раскрытия параметра любые кавычки в результате обрабатываются как буквенные символы, а не как синтаксис для экранирования пробелов. Правильный способ создания списка значений - использовать массив, который действует как второй уровень цитирования, чтобы оставить пробел в каждом элементе. В качестве бонуса, присвоения массивов также позволяют более удобочитаемое форматирование.

MAIN_MENU=(
  1 'Create new image'   # Comments can be added, as well
  2 'Start image as overriding'
  3 'Start image as snapshot'
  4 'Install OS'
  5 'Settings'
)
dialog --title "Title" --menu 'Choose operation:' 0 0 5 "${MAIN_MENU[@]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...