我对Bash很陌生,所以这可能是微不足道的,但我只是没有得到它。我正试图逃避文件名中的空格。看一看。请注意,这是一个“工作示例” - 我可以更轻松地完成使用空白页面交错文件,但我在这里是关于空间的。
#! /bin/sh
first=true
i=combined.pdf
o=combined2.pdf
for f in test/*.pdf
do
if $first; then
first=false
ifile=\"$f\"
else
ifile=$i\ \"$f\"
fi
pdftk $ifile blank.pdf cat output $o
t=$i
i=$o
o=$t
break
done
假设我有一个名为my file.pdf
的文件(带空格)。我希望ifile变量包含字符串combined.pdf "my file.pdf"
,这样pdftk就可以将它用作两个文件参数 - 第一个是combined.pdf
,第二个是my file.pdf
。
我尝试了各种转义方法(无论是否首先转义引号本身等),但在执行pdftk时它会不断分割my
和file.pdf
。
编辑:澄清:我正在尝试将一个变量中的多个文件名(作为多个参数)传递给pdftk命令。我希望它能识别两个文件名之间的区别,但不能在空格处撕开一个文件名。
答案 0 :(得分:7)
将多个参数放入单个变量中是没有意义的。相反,将它们放入一个数组中:
args=(combined.pdf "my file.pdf");
请注意引用"my file.pdf"
来保留空格。
您可以像这样使用数组:
pdftk "${args[@]}" ...
这会将两个单独的参数传递给pdftk
。 "${args[@]}"
中的引号是必需的,因为它们告诉shell将每个数组元素视为单独的"字" (即不分割数组元素,即使它们包含空格)。
作为旁注,如果您使用类似数组的bash
主题,请将您的shebang更改为
#!/bin/bash
答案 1 :(得分:0)
尝试:
find test/*.pdf | xargs -I % pdftk % cat output all.pdf
正如我在其他答案的评论中所说xargs
是最有效的方法。
find
传递给某个命令以将空白页面放在其间(类似于list->字符串连接)。我更喜欢这种方式,因为它更像FP。