Дано:
var='foo\nbar'
Обратите внимание на разницу:
$ awk -v var="$var" 'BEGIN{print "<" var ">"}'
<foo
bar>
$ var="$var" awk 'BEGIN{var=ENVIRON["var"]; print "<" var ">"}'
<foo\nbar>
$ awk 'BEGIN{var=ARGV[1]; ARGV[1]=""; print "<" var ">"}' "$var"
<foo\nbar>
Подробнее см. http://cfajohnson.com/shell/cus-faq-2.html#Q24.
Никогда не делайте printf <input data>
кстати, если толькоВы имеете в виду ОЧЕНЬ конкретную цель и полностью понимаете все предостережения / последствия.Вместо этого сделайте printf "%s", <input data>
- представьте себе разницу, если / когда <input data>
включает символы форматирования printf, такие как %s
.
Также всегда всегда указываются переменные вашей оболочки (google it), никогда не используйте весь верхний регистр для неэкспортированной оболочкипеременные по соглашению и во избежание конфликта с переменными окружения.
Таким образом, если вы используете loc вместо вместо LOC и agent вместо AGENT в назначении над ним, вся ваша строка awk будет (если ваш awk поддерживает ENVIRON, в противном случае используйтеподход ARGV выше):
agent="$agent" awk -v line="$loc" 'BEGIN{text=ENVIRON["agent"]} {print} NR==line{printf " %s", text}' file.htm