bash - 在 GNU Make 中转义文件名
问题描述
我的文件名有括号、波浪号等。例如:'Per a què serveixen les equacions de segon grau?.md'
.
我有一个简单的 Makefile:
$ cat Makefile
%.md.html: %.md
echo $<
ls $<
当我使用这个 makefile 运行 make 时,我得到了这个错误:
$ make Per\ a\ què\ serveixen\ les\ equacions\ de\ segon\ grau\?.md.html
echo Per a què serveixen les equacions de segon grau?.md
Per a què serveixen les equacions de segon grau?.md
ls Per a què serveixen les equacions de segon grau?.md
ls: no s’ha pogut accedir a 'Per': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'a': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'què': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'serveixen': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'les': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'equacions': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'de': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'segon': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'grau?.md': El fitxer o directori no existeix
make: *** [Makefile:3: Per a què serveixen les equacions de segon grau?.md.html] Error 2
因为文件名本身没有转义。无论如何要说类似的话: ls escape($<)
在我的makefile中?也许调用 bash 命令?
解决方案
对于这个特定的示例,引用自动变量的将起作用:
echo "$<"
ls "$<"
但是,此技巧不适用于可选的空变量或包含多个文件的变量。由于 GNU Make 如何在列表中使用空格作为分隔符,它总体上不适合处理其中包含空格的文件名。
推荐阅读
- amazon-cloudwatch - 使用“aws cloudwatch get-metric-widget-image”从 aws CLI 获取“singleValue”图像
- android - 如何使用 a2dp 和 avrcp 蓝牙配置文件连接两个 android 设备?
- python - 将字符串转换为所需的 json 格式
- java - IBM Watson:未经授权
- python-3.x - 从熊猫数据框中除零以外的列表列中获取重复次数最多的值
- python - 将数据框中的对象(时间)类型列转换为日期时间
- bibliography - 在 TUSTEP 中格式化书目名称
- python - Apply multiple conditional level groupby
- python - 如何使用 Pandas 从 .txt 文件中解析表格
- amazon-web-services - 我用 nuget 导入的 AWS 库在哪里