как правильно передать _set_ параметров с пробелами в функцию оболочки

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

function build() { make CC="$1" CFLAGS="$2" $* # $* is not correct here! } build gcc "XXX" VAR1="ab" VAR2="c=A d=B" LDFLAGS="-L/opt/lib -lm" 

как эквивалент

 make CC=gcc CFLAGS=XXX VAR1="ab" VAR2="c=A d=B" LDFLAGS="-L/opt/lib -lm" 

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

One Solution collect form web for “как правильно передать _set_ параметров с пробелами в функцию оболочки”

Для лучшего решения есть два элемента:

  • shift
  • (более) цитирование

Определите функцию с помощью shift , например:

 function build { local cc="$1" local cflags="$2" shift 2 make CC="$cc" CFLAGS="$cflags" "$@" } 

где мы сохраняем первые два параметра для локальных переменных, а затем сдвигаем весь массив аргументов на два; Кроме того, укажите расширение «$ @».

Затем назовите его дополнительным предложением, например:

 build gcc "XXX" 'VAR1="ab" VAR2="c=A d=B"' 'LDFLAGS="-L/opt/lib -lm"' 

где одиночные кавычки защищают дополнительные аргументы в функции; в противном случае оболочка удаляет кавычки, и вы VAR2=c=A d=B с VAR2=c=A d=B (без кавычек) в функции.

  • Как удалить цветовые коды из stdout и pipe в файл и stdout
  • Инициировать скрипты. Различие загрузочной и стартовой деятельности
  • что означает $ * в shell
  • Самый быстрый способ конкатенации файлов
  • Как проверить, открыт ли текущий запущенный процесс root или пользователем
  • Почему `zip` в цикле for работает, когда файл существует, но не тогда, когда он этого не делает?
  • Установка и размонтирование в том же сценарии оболочки приводит к ошибке
  • Извлечение справочного сообщения из самого скрипта
  • Удаление пространства в начале переменных данных
  • Создание текстового файла из других текстовых файлов
  • Что означает эхо "{@@ ##}"?
  • Linux и Unix - лучшая ОС в мире.