Bash xmlstarlet + переменная не работает

У меня проблема с моим кодом..

Это отлично работает:

xmlstarlet ed --inplace -u '//data[irc="Blablabla"]/usercount' -v $count myfile.xml

Но это не так:

variable="Blablabla"    
xmlstarlet ed --inplace -u '//data[irc="$variable"]/usercount' -v $count myfile.xml

количество пользователей не меняет значение, и я не знаю, почему :(


person Musyanon    schedule 07.06.2016    source источник


Ответы (1)


Дешевый, простой и неправильный способ — просто изменить тип цитирования:

variable="Blablabla" 
xmlstarlet ed --inplace \
  -u "//data[irc=\"$variable\"]/usercount" \
  -v "$count" \
  myfile.xml

... то есть измените одинарные кавычки в -u 'foo' на двойные кавычки, как в -u "foo".


Лучшей практикой является передача вашей переменной оболочки в качестве переменной XPath, а затем использование ее как таковой в вашем запросе:

variable="Blablabla" 
xmlstarlet ed --inplace \
  --var variable "'$variable'" \
  -u '//data[irc=$variable]/usercount' \
  -v "$count" \
  myfile.xml

Это позволяет избежать смешивания кода и данных — практика, которая является основной причиной почти всех разновидностей уязвимостей внедрения.

person Charles Duffy    schedule 07.06.2016
comment
Работайте идеально! Большое спасибо: D - person Musyanon; 07.06.2016