Bash GNU Make中的转义文件名

Bash GNU Make中的转义文件名,bash,makefile,gnu-make,Bash,Makefile,Gnu Make,我的文件名有parentesis、tildes等。例如:'Per a quèserveixen les equacions de segon grau?.md' 我有一个简单的Makefile: $ cat Makefile %.md.html: %.md echo $< ls $< 因为文件名本身没有转义。是否有类似这样的说法:ls escape($对于这个特定的示例,引用自动变量将起作用: echo "$<" ls "$&l

我的文件名有parentesis、tildes等。例如:
'Per a quèserveixen les equacions de segon grau?.md'

我有一个简单的Makefile:

$ cat Makefile 
%.md.html: %.md
    echo $<
    ls $<

因为文件名本身没有转义。是否有类似这样的说法:
ls escape($对于这个特定的示例,引用自动变量将起作用:

echo "$<"
ls "$<"

echo“$您需要引用。
ls”$简短回答:不可能在makefile中使用包含空格的文件名。如果必须使用包含空格的文件名,则必须找到其他工具来管理您的文件。我只想说:如果您只想像这样在命令行中传递文件名,那么它可以工作(正如@williampersell所说,只需在shell中引用即可)。但是,如果您想将文件名放入makefile的变量中,或者使用
通配符
或诸如此类的方法,则无法(合理地)将文件名放入makefile中完成。如果你在整个网络上搜索,你会发现针对某些特定情况的各种黑客解决方法,但没有完整的解决方案。我稍微不同意MadScientist。有一个“完整的解决方案”,但它是一个政策解决方案,而不是一个技术解决方案。不要使用与
[a-zA-Z_-]不匹配的名称+
:)。我想你忘记了可接受字符列表中的
[0-9]
(我知道你的意思,但你必须将
-
放在课程的开头或结尾,不能放在中间):)。从纯make的角度来看,它唯一有助于避免的字符是空格、
$
。其中唯一真正站不住脚的是空白:其余的都很烦人,但很容易处理。
echo "$<"
ls "$<"