试图在单引号Bash中使用变量

时间:2016-07-21 15:54:33

标签: bash

我尝试在下面的代码段中使用变量$ 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 个答案:

答案 0 :(得分: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可以被调用的所有方式。)< / p>