gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:10:18 26 4
gpt4 key购买 nike

我对 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

我已经尝试了各种转义方式(有或没有先转义引号本身等),但它在执行时不断拆分 myfile.pdf pdf.

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

最佳答案

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

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

请注意,引用 "my file.pdf" 是为了保留空格。

你可以像这样使用数组:

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

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

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

#!/bin/bash

关于Bash转义文件名,变量中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19122448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com