7 Stimmen

Ausführen einer lokalen Bash-Variablen in Anführungszeichen

Angenommen, ich habe vier Webserver, auf denen ich eine HTML-Zeile zu einer Datei hinzufügen muss. Wie Sie sehen können, muss die ganze Zahl nach cluster=

for i in 01 02 03 04; do ssh web.${i}.domain.com 'echo "<img src=beacon.gif?cluster=${i}>" >> /var/www/index.html'; done

Wie lässt sich dies bewerkstelligen? Vielen Dank im Voraus.

19voto

nosid Punkte 47014

Bitte beachten Sie die ' vorher und nachher ${i} :

for i in 01 02 03 04; do
    ssh web.${i}.domain.com 'echo "<img src=beacon.gif?cluster='${i}'>" >> /var/www/index.html'
done

Editer : Es besteht ein großer Unterschied zwischen Quoting in der Shell und Stringliteralen in Programmiersprachen. In der Shell "wird das Quoting verwendet, um die besondere Bedeutung bestimmter Zeichen oder Wörter für die Shell zu entfernen" (Bash-Handbuch). Die folgenden zwei Zeilen sind mit der Bash identisch:

'foo bar'
foo' 'bar

Es ist nicht notwendig, die Buchstaben in Anführungszeichen zu setzen - aber es verbessert die Lesbarkeit. In Ihrem Fall sind nur Sonderzeichen wie " y < muss angegeben werden. Aber die Variable $i enthält nur Ziffern, und diese Ersetzung kann sicher außerhalb von Anführungszeichen erfolgen.

2voto

twalberg Punkte 56757
for i in 01 02 03 04
do
  ssh web.${i}.domain.com "echo \"<img src=beacon.gif?cluster=${i}>\" >> /var/www/index.html
done

Im Grunde genommen verwenden Sie einfach doppelte Anführungszeichen, aber Sie müssen die inneren Anführungszeichen auslassen.

1voto

Alex Howansky Punkte 47344

Ich denke, das sollte genügen:

"echo \"<img src=beacon.gif?cluster=${i}>\" >> /var/www/index.html"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X