【问题标题】:Trying to use a variable in Single Quotes Bash尝试在单引号 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。

对我有什么想法吗?

谢谢!

【问题讨论】:

    标签: bash


    【解决方案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, ...)。
    猜你喜欢
    • 2012-04-27
    • 2011-12-26
    • 1970-01-01
    • 2012-01-25
    • 2015-06-03
    • 2012-06-24
    • 2015-10-08
    • 2013-08-09
    • 2018-03-04
    相关资源
    最近更新 更多