[英]Bash escaping spaces in filename, in variable
我對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命令。 我希望它能識別兩個文件名之間的區別,但不能在空格處撕開一個文件名。
將多個參數放入單個變量中沒有意義。 相反,將它們放入一個數組:
args=(combined.pdf "my file.pdf");
請注意,引用"my file.pdf"
來保留空格。
您可以像這樣使用數組:
pdftk "${args[@]}" ...
這將向pdftk
傳遞兩個單獨的參數。 "${args[@]}"
中的引號是必需的,因為它們告訴shell將每個數組元素視為單獨的“單詞”(即不分割數組元素,即使它們包含空格)。
作為旁注,如果你使用bash
isms之類的數組,那就把你的shebang改成了
#!/bin/bash
嘗試:
find test/*.pdf | xargs -I % pdftk % cat output all.pdf
正如我在其他答案的評論中所說, xargs
是最有效的方法。
編輯:我沒有看到你需要一個空白頁面,但我想你可以將上面的find
管道輸入到一些命令之間的空白頁面(類似於list-> string join)。 我喜歡這種方式,因為它更像FP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.