Поскольку ваш скрипт написан, нет смысла использовать массив doCmd
.Вы можете просто написать команду:
"$cmd/configure" "${optsA}" "${optsB}"
Или, проще:
"$cmd/configure" "$optsA" "$optsB"
Однако возможно, что вы упростили сценарий таким образом, что скрывается необходимостьмассив.В любом случае, если вы используете массив, вам нужно убедиться, что его элементы не разделены по словам и не расширены filepath, поэтому вы должны указать его расширение:
"${doCmd[@]}"
Кроме того, вам нужно избавиться отцитаты в optsB
.Вы не хотите передавать
CPPFLAGS="-I/home/stuffB -I/home/stuffC"
в сценарий configure
.Вы хотите передать то, что пропустит оболочка, если вы наберете приведенную выше строку.И то, что оболочка передаст, будет единственным аргументом командной строки с пробелом в нем, похожим на это:
CPPFLAGS=-I/home/stuffB -I/home/stuffC
Чтобы передать это в optsB
, вы просто пишете:
optsB="CPPFLAGS=-I${myFolderB} -I${myFolderC}"
Наконец, оболочка не «добавляет одинарные кавычки» в командную строку.Он показывает вам форму команды, которую вы можете ввести в командной строке.Поскольку аргумент (неверно) содержит символ кавычки, оболочка показывает вам команду с аргументами skingle-quote, так что вы можете видеть, что optB был (неправильно) разделен на два аргумента, каждый из которых содержит (неправильно) одиндвойная кавычка.
Вы могли бы найти многое из вышеперечисленного и многое другое, вставив свой скрипт в https://shellcheck.net. Как подсказывает сводка тегов bash , вы всегда должны попробовать это, прежде чем спрашиватьвопрос оболочки здесь, потому что большую часть времени, он решит вашу проблему мгновенно.