Bash脚本变量在Ghostscript命令中未正常展开的问题求助
问题原因与解决方法
你的脚本报错是因为手动添加的单引号被当成了文件名的一部分,而非Bash的语法引号。
具体原因
- 执行
$(printf "'%s' " "${FILES[@]}")时,Bash会将printf输出的内容(包括单引号)作为普通字符串拆分,传递给gs的参数是'content.pdf'和'another.pdf'(带单引号的文件名)。gs会尝试打开这些带单引号的文件,自然找不到,因此抛出/undefinedfilename错误。 - 直接在终端执行命令时,单引号是Bash的语法符号,用来界定文件名边界,Bash会自动去掉单引号,将真实的文件名
content.pdf传递给gs,所以命令能正常运行。
正确脚本
直接使用数组的展开语法即可,Bash会自动处理参数的正确传递:
FILES=("content.pdf" "another.pdf") gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="output.pdf" -dAutoRotatePages=/None "${FILES[@]}"
补充说明
"${FILES[@]}"会将数组中的每个元素作为独立的命令参数传递,即使文件名包含空格也能正确处理,完全不需要手动添加引号。
内容的提问来源于stack exchange,提问作者olltsu
相关产品推荐
相关产品推荐

