我有这段代码:
#!/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;始终打印相同的行而不是多次。我错过了什么?
答案 0 :(得分:12)
如果你想追加一个字符串,只需
latex="$latex newstring"
或
latex=${latex}newstring
你需要注意bash不会将上述内容解释为新的var,例如: "$a4
“将被解释为变量a4
,而不会被$a
附加4
。
答案 1 :(得分:3)
几个问题:
反斜杠表达式不会在双引号内特别处理,因此&#34; \ n&#34; 是两个字符,&#34; \&#34;和&#34; n&#34;,而不是一个换行符。使用$&#39; \ n&#39;包括一个实际的 换行
echo $latex
展开变量,但是bash会对latex
中包含的任何空格执行单词分词,包括换行符,因此echo
永远不会看到换行符。您需要引用变量:echo "$latex"
。
正如其他人所指出的,你是在循环的每次迭代中重置变量。
全部放在一起,
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=""
在循环中,所以每次都重置它。把它放在循环开始之前。