Executați o variabilă locală bash în interiorul ghilimele duble

Hypothetically I have four webservers that I need to add a line of HTML to a file. As you can see I need the integer to appear after cluster=

for i in 01 02 03 04; do ssh web.${i}.domain.com 'echo "" >> /var/www/index.html'; done

Cum se poate realiza aceasta? Mulțumesc anticipat.

0
O etichetă de imagine la sfârșit? care nu este valabil html.
adăugat autor pizza, sursa

3 răspunsuri

for i in 01 02 03 04
do
  ssh web.${i}.domain.com "echo \"\" >> /var/www/index.html
done

Practic, folosiți doar citate duble, dar va trebui să scăpați de cele interioare.

0
adăugat

Cred că ar trebui să o facă:

"echo \"\" >> /var/www/index.html"
0
adăugat

Rețineți ' înainte și după $ {i} :

for i in 01 02 03 04; do
    ssh web.${i}.domain.com 'echo "" >> /var/www/index.html'
done

Edit: There is a huge difference between quoting in shell and string literals in programming languages. In shell, "quoting is used to remove the special meaning of certain characters or words to the shell" (bash manual). The following to lines are identical to bash:

'foo bar'
foo' 'bar

There is no need to quote the alphabetic characters - but it enhances the readability. In your case, only special characters like " and < must be quoted. But the variable $i contains only digits, and this substitution can be safely done outside of quotes.

0
adăugat
tu ești omul! Îmi place acest site. =)
adăugat autor jdorfman, sursa
@nosid: Cred că merită să explicăm ce se întâmplă acolo. După toate, sfârșesc să faceți o concatenare a șirului și soluția dvs. este diferită de celelalte două. Încă +1.
adăugat autor 0xC0000022L, sursa