簡體   English   中英

Bash在變量中轉義文件名中的空格

[英]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時它會不斷分割myfile.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM