Autoconf腳本遇到文件名或路徑名帶空格的問題。例如,帶空格的Shell變量,引用單個命令行選項
./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不是一個通用的解決方案)。
我認爲這歸結於獲取一個shell變量,其中包含空格作爲單個命令行變量進行分析,而不是在空間拆分。最簡單的外殼的例子我能想出是一個shell變量作爲自變量創建空間和嘗試列表中的文件與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的我不能修改shell代碼:在引用的東西以下嘗試
$ 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\\"`"
等。
這是不可能在shell腳本中完成的嗎?是否有一個神奇的引用將使用空格將shell變量擴展爲單個命令行參數?
我會將IFS設置爲空字符串;它也可以工作。 'saveIFS = 「$ IFS」; IFS = ''; ls $文件; IFS =「$ saveIFS」' – 2009-11-12 18:11:44