Joo*_*ost 4 bash escaping spaces
我对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
Run Code Online (Sandbox Code Playgroud)
假设我有一个名为my file.pdf(带空格)的文件.我希望ifile变量包含字符串combined.pdf "my file.pdf",这样pdftk就可以将它用作两个文件参数 - 第一个是combined.pdf,第二个是my file.pdf.
我已经尝试了各种方法来逃避(无论是否首先逃避引号本身等),但它仍然在分裂my和file.pdf执行pdftk时.
编辑:澄清:我正在尝试将一个变量中的多个文件名(作为多个参数)传递给pdftk命令.我希望它能识别两个文件名之间的区别,但不能在空格处撕开一个文件名.
将多个参数放入单个变量中没有意义.相反,将它们放入一个数组:
args=(combined.pdf "my file.pdf");
Run Code Online (Sandbox Code Playgroud)
请注意,"my file.pdf"引用它来保留空格.
您可以像这样使用数组:
pdftk "${args[@]}" ...
Run Code Online (Sandbox Code Playgroud)
这将传递两个单独的参数pdftk.引号"${args[@]}"是必需的,因为它们告诉shell将每个数组元素视为一个单独的"单词"(即不分割数组元素,即使它们包含空格).
作为旁注,如果您使用bash类似数组的isms,请将您的shebang更改为
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)