2013-04-18 5 views
0

Я не смог найти точную ссылку на то, что я делаю ...Разверните внутреннюю команду переменной ``

У меня есть следующий сценарий, который не расширить переменный внутри команды:

#!/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 вместо содержимого имени.

я на самом деле нужно читать строки из файла и RUND команды на название так мой реальный сценарий (имеет те же проблемы):

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 
+0

Вам не нужны обратные ссылки, чтобы запустить 'convert' в вашем примере. – chepner

+0

Показывает, сколько времени прошло с тех пор, как я коснулся этого? :) Вот как меня научили писать Bash в uni ... Я где-то читал, что он поддерживает «Bourne Shell» ... – Shaihi

ответ

1

у вас есть ускользающая проблема. либо используют надлежащее экранирование с обратной косой чертой, либо уверены, что в противном случае $ args не будут «защищены» одинарными кавычками. , например.

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

Чтобы лучше узнать, что происходит, попробуйте разбить проблему на несколько меньших проблем. , например. создайте команду «ничья» со всеми расширениями перед ее использованием в конверте

name="my name" 
draw="text 330, 900 '"${name}"'" 
convert -pointsize 250 -fill black -draw "${draw}" tag.jpg name_my.jpg 
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` 
+0

Я знаю, что мой вопрос является фундаментальным, но по какой-то причине просто принятие вашего решения было произведено только '\' как текст – Shaihi

Смежные вопросы