在``命令中展开变量

时间:2013-04-18 07:07:01

标签: bash

我找不到我正在做的确切参考......

我有以下脚本不会扩展命令中的变量:

#!/bin/bash

name="my name"
`convert -pointsize 250 -font /usr/share/fonts/truetype/msttcorefonts/impact.ttf -fill black -draw 'text 330,900 "$name"' tag.jpg name_my.jpg`

这会导致图像具有文本$ name而不是name的内容。

我实际上需要从文件中读取行并在每个名称上运行命令,以便我的真实脚本(具有相同的问题):

arr=(`cat names.txt`)
for (( i=0; i<${len}; i+=2 ));
do
        `convert -pointsize 250 -font /usr/share/fonts/truetype/msttcorefonts/impact.ttf -fill black -draw 'text 330,900 "$(${arr[i]} ${arr[i+1]})"' tag.jpg name_${arr[i]}.jpg`
done

2 个答案:

答案 0 :(得分:2)

你的问题是单引号('')而不是反引号。由于$name位于其中,因此不会展开。相反,你应该使用双引号,你可以像这样转义内部引号:

`convert -pointsize 250 -font /usr/share/fonts/truetype/msttcorefonts/impact.ttf -fill black -draw "text 330,900 \"$name\"" tag.jpg name_my.jpg`

答案 1 :(得分:1)

你有一个逃避问题。 要么使用反斜杠正确转义,要么确保$ args不被单引号“保护”。 e.g。

name="bla"
# using escape character \
value1="foo \"${name}\""
# putting single-quotes inside double-quotes
value2="foo '"${name}"'"

为了更好地了解发生了什么,请尝试将问题分解为多个较小的问题。 例如在转换

中使用之前,使用所有扩展创建“draw”命令
name="my name"
draw="text 330, 900 '"${name}"'"
convert -pointsize 250 -fill black -draw "${draw}" tag.jpg name_my.jpg