Сценарии 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\\"`"
и так далее.
Это невозможно выполнить в сценариях оболочки? Есть ли волшебное цитирование, которое расширит переменную оболочки с пробелами в один аргумент командной строки?