如何将引用文件名列表作为参数传递给Bash中的另一个脚本



我在脚本中将一个包含空格的带引号的文件名列表传递给pdfunite。它在shell中有效,但在我的bash脚本中无效。

概念验证

通过这种方式,我收集了用双引号":封装的给定模式的所有文件名

# Collect quoted file names 
$ ls -x -Q "file"*.pdf
"file 01.pdf" "file 02.pdf" "file 03.pdf"
# Manually passed params in shell following the syntax: pdfunite <PDF-sourcefile-1>..<PDF-sourcefile-n> <PDF-destfile>
$ pdfunite "file 01.pdf"  "file 02.pdf" "file output.pdf"
# File is successfully created
$ ls "file output.pdf"
'file output.pdf'

我的脚本

在我的脚本中,我试图以各种方式收集文件列表,但没有任何效果

# first approach - single line
pdfunite $(ls -x -Q "file"*.pdf) "file output.pdf"
# second approach - using variable
filesin=`ls -x -Q "file"*.pdf) "file output.pdf"`
pdfunite $filesin "file output.pdf"

我的脚本输出错误

上述两种方法都失败了,pdfunite发出以下消息:

pdfunite '"file' '01.pdf"' '"file' '02.pdf"' 'file output' 
I/O Error: Couldn't open file '"file': No such file or directory.

那么,传递用引号封装的文件名列表的诀窍是什么呢?

pdfunite file*.pdf 'file output.pdf'

pdfunite 'file '*.pdf 'file output.pdf'

请注意,如果file output.pdf存在,它将在glob列表中,因此它不应该存在。

glob扩展中不会出现分词,但它会用于(未引用的(命令替换。在脚本中解析或以其他方式使用ls输出通常是错误的。Glob扩展和find是更好的选择。

编辑:修复了第一个示例中的拼写错误

相关内容

  • 没有找到相关文章

最新更新