GhostScript 和文件名中的空格

GhostScript and spaces in filenames

我在 GhostScript 接受文件名的 shell 脚本变量时遇到问题,如果这些文件名中包含 space。

gs -dPDFX -dNOPAUSE -dBATCH -dNOOUTERSAVE -sDEVICE=pdfwrite -sOutputFile="${filename}" -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -dCompatibilityLevel=1.4  "${f}" /usr/local/share/ghostscript/9.20/lib/PDFX_def.ps

如果文件名有 space,那么 GS 会说 "no such file",给出名称为:

path/to/file/partial\

(注意最后的反斜杠。)

我还得到: Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\ qwe.pdf)

字面意思是逃跑。我不敢相信这样一个受人尊敬的软件有如此重大的失败,尽管其他人似乎也有同样的问题,但没有任何重要的解决方案。我可以对我的脚本做些什么吗?

我使用的是 MacOS 10.11 和 12。 哦,"don't have spaces" 不是解决方案。 ;-)

更新:即使是最简单的示例也会显示错误:

> f="/Users/Ben/Desktop/qwe\ qwe.pdf"
> gs "$f"
GPL Ghostscript 9.20 (2016-09-26)
Copyright (C) 2016 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\ qwe.pdf)

我想我已经解决了。似乎 GhostScript 没有正确处理转义字符,而是按字面解释它们。所以你(我)需要通过从文件路径中删除所有反斜杠来清理输入。

 filename=${filename//\}

再说一次,这么古老的软件竟然有这样的bug,真是太奇怪了。