在双引号内执行本地bash变量

时间:2012-06-04 19:59:49

标签: bash for-loop echo

假设我有四个网络服务器,我需要在文件中添加一行HTML。如您所见,我需要在 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

如何实现这一目标?提前谢谢。

3 个答案:

答案 0 :(得分:10)

请注意'之前和之后的${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

编辑:编程语言中shell和字符串文字引用之间存在巨大差异。在shell中,“引用用于删除某些字符或单词到shell的特殊含义”(bash手册)。以下行与bash相同:

'foo bar'
foo' 'bar

无需引用字母字符 - 但它增强了可读性。在您的情况下,只能引用"<等特殊字符。但变量$i只包含数字,这种替换可以在引号之外安全地完成。

答案 1 :(得分:0)

我认为应该这样做:

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

答案 2 :(得分:0)

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

基本上,只需使用双引号,但你必须逃避内部引号。