尝试在单引号 Bash 中使用变量
Posted
技术标签:
【中文标题】尝试在单引号 Bash 中使用变量【英文标题】:Trying to use a variable in Single Quotes Bash 【发布时间】:2016-11-25 07:42:22 【问题描述】:我正在尝试在下面的这个 sn-p 中使用变量 $y,但一直遇到显示为 $y.pdf 的文件名
ls -v *.jpg | tr '\n' ' ' | sed 's/$/\ $y.pdf/' | xargs convert
我也尝试过以下方法:
ls -v *.jpg | tr '\n' ' ' | sed 's/$/\'"$y.pdf"'/' | xargs convert
ls -v *.jpg | tr '\n' ' ' | sed 's/$/\ $y.pdf/' | xargs convert
顶部的通常会失败,因为 sed 期待别的东西。最下面的只是让我的文件名 $y.pdf。
对我有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:不要介意引用问题;这完全是错误的做法。只需使用for
循环即可避免各种潜在问题。
for f in *.jpg; do
convert "$f" "$f%.jpg.pdf"
done
$f%.jpg
扩展为当前文件的名称减去.jpg
扩展名。
将文件合并为一个 PDF 更简单(我认为):
convert *.jpg "$y.pdf"
假设ls -v
以正确的顺序输出文件名,并且没有涉及解析ls
的任何常见问题,请使用
ls -v *.jpg > input.txt
convert @input.txt "$y.pdf"
(可能有一种方法可以避免使用临时文件,可能就像ls -v *.jpg | convert @- "$y.pdf"
一样简单,但是我懒得弄清楚可以调用convert
的所有方法。)
【讨论】:
我很确定我不想要这个,只是因为我想将多个 .jpg 文件合并到一个 PDF 中,而不是将每个 .jpg 合并到一个 pdf 中。 要更新 chepner 的编辑,不幸的是没这么简单。不过,也许有更好的方法。简而言之,我将多个 jpg 合并到一个 PDF 中。这里的问题是我有大约 10,000 个文件。每个命名的日期页面 1、日期页面 2 等。问题是由于某种原因它没有正确合并它们,因为它正在进入第 1 页、第 10 页、第 2 页、第 20 页等。这就是为什么我m 使用 ls -v。我四处寻找,发现this。 在他的第三次编辑中……确实奏效了。我认为我之前所做的是将 input.txt file.pdf 转换为试图将 input.txt 转换为 pdf 的操作。我想我错过了@。谢谢! 关于为什么排序如此奇怪的旁注: ls 以这种方式输出它们,你可以说,它在按字母顺序排序后输出文件(1 在 2 之前,因此首先是所有内容以 1 开头 (1, 10, 11, ...)。以上是关于尝试在单引号 Bash 中使用变量的主要内容,如果未能解决你的问题,请参考以下文章