bash добавляет апострофы к расширенной переменной

Я читаю файл внутри моего сценария bash, где каждая строка состоит из нескольких столбцов:

ANSIBLE 'first run' '--diff --extra-vars "client=yes fast=no"' 

Как вы можете видеть, строка состоит из трех столбцов, которые имеют пробелы в апострофах. Третий столбец содержит опции для вызова двоичного кода. Когда я прочитал в файле, я сохранил эти параметры для переменной:

 custom_options=${columns[2]} 

Это оценивает

 custom_options='--diff --extra-vars "client=yes fast=no"' 

Теперь я хочу выполнить свой двоичный файл с такими параметрами:

 ansible-playbook $custom_options site.yml 

Однако это не удается, потому что при выполнении были добавлены апострофы вокруг внутренней строки:

 ansible-playbook --diff --extra-vars '"client=yes fast=no"' site.yml 

Кто-нибудь знает, как заменить переменную строку as-is?

Вот короткий сценарий для быстрого воспроизведения поведения:

 #!/bin/bash set -x touch "as is" command='-name "as is"' find . $command -type f 

One Solution collect form web for “bash добавляет апострофы к расширенной переменной”

Я нашел решение, а не решение. Я окружил всю команду переменной внутри выражения eval :

 eval "ansible-playbook $custom_options site.yml" 

Здесь эквивалентное использование в примере скрипта:

 ... eval "find . $command -type f" 

Я не баш-гуру, и я не знаю, имеет ли это обходное решение какие-либо побочные эффекты. Тем не менее, я протестировал следующее:

  • eval работает с трубами: eval "command | tee file"
  • возможны котировки внутри eval: eval "command \"${var}\""

Однако это соответствует моим потребностям, но оно кажется грязным. Лучшие решения приветствуются.

  • Bash Scripting echo локально в функции
  • Создать таблицу с частотой уникальных имен, полученных из нескольких CSV-файлов
  • проверьте, если сценарий оболочки принимает аргумент командной строки перед запуском
  • Сравнение значений в одной строке
  • rm -rf: невозможно удалить `/ opt / jetty ': каталог не пуст
  • Как подождать файл в сценарии оболочки?
  • Как удалить текст в файле до и после некоторого шаблона
  • Параметр игнорируется при цитировании
  • эхо-цикл с командой переменных
  • компиляция оболочки nginx не выполняется
  • Как разбирать аргументы командной строки с произвольной строкой
  • Linux и Unix - лучшая ОС в мире.