加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash在变量中转义文件名中的空格

发布时间:2020-12-15 21:17:26 所属栏目:安全 来源:网络整理
导读:我对 Bash很新,所以这可能是微不足道的,但我只是没有得到它.我正试图逃避文件名中的空格.看一看.请注意,这是一个“工作示例” – 我得到的交错文件与空白页面可能更容易完成,但我在这里是关于空间. #! /bin/shfirst=truei=combined.pdfo=combined2.pdffor f
我对 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,第二个是我的file.pdf.

我已经尝试了各种转义方法(无论是否首先转义引号本身等),但在执行pdftk时它会不断分割my和file.pdf.

编辑:澄清:我正在尝试将一个变量中的多个文件名(作为多个参数)传递给pdftk命令.我希望它能识别两个文件名之间的区别,但不能在空格处撕开一个文件名.

解决方法

将多个参数放入单个变量中没有意义.相反,将它们放入一个数组:

args=(combined.pdf "my file.pdf");

请注意,引用“my file.pdf”来保留空格.

您可以像这样使用数组:

pdftk "${args[@]}" ...

这将向pdftk传递两个单独的参数. “${args [@]}”中的引号是必需的,因为它们告诉shell将每个数组元素视为一个单独的“单词”(即不分割数组元素,即使它们包含空格).

作为旁注,如果您使用像数组这样的bashisms,请将您的shebang更改为

#!/bin/bash

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读