как правильно передать _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 (без кавычек) в функции.

  • Как вернуть код выхода? Ошибка: return: Чтение: требуется числовой аргумент
  • Показать видеофайлы с его размером
  • Как проверить, является ли введенная переменная буквенно-цифровой или нет в ksh?
  • Удаление определенного файла из файла tar
  • Задача, не выполняемая crontab
  • Как извлечь строки, начинающиеся с определенного письма?
  • Условное выполнение - запуск постоянных подпроцессов и коротинов
  • Перенаправить ввод в несколько разных файлов вывода
  • Длительный сценарий прекращает отправку вывода в файл
  • Как проверить процесс вместе с его аргументами в списке процессов?
  • Как передать имя функции тестируемому?
  • Linux и Unix - лучшая ОС в мире.