Как использовать переменные в качестве входных данных для xmlstarlet val?

#shell #xmlstarlet

#оболочка #xmlstarlet

Вопрос:

Как я могу использовать переменные в качестве входных данных для команды проверки xmlstarlet? Вот полный пример:

 read -r -d '' XML <<"EOF"
<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
</catalog>
EOF

# emits a usage message, exits with status 2
xmlstarlet val -v . <<< "$XML"

# also emits a usage message and exits with status 2
xmlstarlet val -v - <<< "$XML"
  

Комментарии:

1. Кстати, обратите внимание, что обычно мы просим, чтобы ваши вопросы содержали конкретное сообщение об ошибке (или, иначе, описание фактического поведения), избегая фразы «не работает». (Если бы это работало, вас бы здесь не было; что он делает вместо этого? Выход с ошибкой? Какая ошибка? Немедленно вернуться к командной строке без вывода? Если да, то с каким статусом выхода? И т.д.).

Ответ №1:

Удалите недопустимый -v аргумент, и ваша команда будет проанализирована правильно:

 $ xmlstarlet val - <<<"$XML"
- - valid