建一个字符串

时间:2012-08-16 08:11:51

标签: bash ubuntu

我有这段代码:

#!/bin/bash

input="./user.cvs"

while IFS=';' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13
do

  path="./QRcodes/$f2$f3.png"

  vcard="BEGIN:VCARD%0AN;CHARSET=utf-8:$f3;$f2;;$f1;%0AADR;CHARSET=utf-8;INTL;PARCEL;WORK:;;$f10;$f11;;$f12;$f13%0AEMAIL;INTERNET:$f6%0AORG:$f4%0ATEL;WORK:$f8%0ATEL;FAX;WORK:$f9%0ATITLE:$f5%0AURL;WORK:$f7%0AEND:VCARD"

  latex=""

  encodedVCard=$(echo "$vcard" | sed -e 's/\+/\%2B/g')

  url="http://api.qrserver.com/v1/create-qr-code/?size=300x300&data=$encodedVCard"

  wget -O "$path" "$url"

  latex+="\n \\begin{tabular}{ C C } \\includegraphics[height=30mm]{graphic.png} & Name \\\\ \\end{tabular}"

  echo $latex

done < "$input"

一切都有效,除了'echo $ latex&#39;始终打印相同的行而不是多次。我错过了什么?

3 个答案:

答案 0 :(得分:12)

如果你想追加一个字符串,只需

latex="$latex newstring"

latex=${latex}newstring

你需要注意bash不会将上述内容解释为新的var,例如: "$a4“将被解释为变量a4,而不会被$a附加4

答案 1 :(得分:3)

几个问题:

  1. 反斜杠表达式不会在双引号内特别处理,因此&#34; \ n&#34;  是两个字符,&#34; \&#34;和&#34; n&#34;,而不是一个换行符。使用$&#39; \ n&#39;包括一个实际的  换行

  2. echo $latex展开变量,但是bash会对latex中包含的任何空格执行单词分词,包括换行符,因此echo永远不会看到换行符。您需要引用变量:echo "$latex"

  3. 正如其他人所指出的,你是在循环的每次迭代中重置变量。

  4. 全部放在一起,

    input="./user.cvs"
    latex=""
    
    while IFS=';' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13
    do
    
      path="./QRcodes/$f2$f3.png"
    
      vcard="BEGIN:VCARD%0AN;CHARSET=utf-8:$f3;$f2;;$f1;%0AADR;CHARSET=utf-8;INTL;PARCEL;WORK:;;$f10;$f11;;$f12;$f13%0AEMAIL;INTERNET:$f6%0AORG:$f4%0ATEL;WORK:$f8%0ATEL;FAX;WORK:$f9%0ATITLE:$f5%0AURL;WORK:$f7%0AEND:VCARD"
    
      #encodedVCard=$(echo "$vcard" | sed -e 's/\+/\%2B/g')
      # You can use bash parameter expansion instead of piping into sed 
      encodedVCard="${vcard//+/%2B}"
    
      url="http://api.qrserver.com/v1/create-qr-code/?size=300x300&data=$encodedVCard"
      wget -O "$path" "$url"
      latex+=$'\n \\begin{tabular}{ C C } \\includegraphics[height=30mm]{graphic.png} & Name \\\\ \\end{tabular}'
    
      echo "$latex"
    
    done < "$input"
    

答案 2 :(得分:1)

你有

latex=""

在循环中,所以每次都重置它。把它放在循环开始之前。