Сценарии Autoconf имеют проблемы с именем файла или путем с пробелами. Например,
./configure CPPFLAGS="-I\"/path with space\""
результатов в (config.log):
configure:3012: gcc -I"/path with space" conftest.c >&5
gcc: with: No such file or directory
gcc: space": No such file or directory
Команда компиляции из ./configure - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
, и я не могу изменить это (возможно, я мог бы, но работа с autoconf таким способом не является общим решением).
Я думаю, что все сводится к получению переменной оболочки, содержащей пробелы, которые нужно анализировать как одну переменную командной строки, а не разбивать на пробелы. Простейший пример оболочки, который я могу придумать, - это создать файл с пробелами и попытаться перечислить его с помощью ls
с переменной оболочки в качестве аргумента ls
:
$ touch "a b"
$ file="a b"
$ ls $file
ls: a: No such file or directory
ls: b: No such file or directory
Это работает, но недопустимо, поскольку в autoconf я не могу изменить код оболочки:
$ ls "$file"
a b
Ни одна из следующих попыток цитирования не работает:
$ file="\"a \"b"; ls $file
ls: "a: No such file or directory
ls: b": No such file or directory
$ file="a\ b"
$ file="a\\ b"
$ file="`echo \\"a b\\"`"
и т. Д.
Это невозможно сделать в сценариях оболочки? Есть ли магическое цитирование, которое расширит переменную оболочки с пробелами в один аргумент командной строки?