Подстановка параметров

#bash

#bash

Вопрос:

У меня есть вызываемая переменная line , которая содержит строку из XML

 user@ubuntu:~$ echo $line
<Ticket State="inWork" />
user@ubuntu:~$ 
  

Я хочу получить inWork текст, то есть в основном строку между кавычками. Хотите выполнить это, используя синтаксис $ {var#Pattern} и $ {var%Pattern} .

Первая часть работает так, как ожидалось

 user@ubuntu:~$ line=${line#*"}
user@ubuntu:~$ echo $line
inWork" />
user@ubuntu:~$ 
  

Но вторая часть не удаляет " />

 user@ubuntu:~$ line=${line%*"}
user@ubuntu:~$ echo $line
inWork" />
user@ubuntu:~$ 
  

Есть какие-либо подсказки, почему это не работает?

Ответ №1:

Это потому, что шаблон *" не совпадает. Что вы хотите в сценарии конца строки, так это "* :

 line='<Ticket State="inWork" />'
echo ${line#*"}
echo ${line%"*}
  

Возможная альтернатива, которая не использует подстановку параметров:

 cut -d'"' -f2 <<< $line
  

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

1. О да, нужно смотреть на это в обратном порядке при сопоставлении с конца. спасибо за быстрый ответ