случай -функция подстроки и цитирование

Вы буквально просили understand string parsing in bash, так что я напишу ответ с учетом этого, хотя это неправильное решение вашей проблемы . Вы можете использовать сам bash, чтобы делать то, что вы хотите,еслиу вас есть действительно чистые данные без специальных символов, где специальный определяется как что-либо за пределами[A-Za-z0-9 ]:

$ id='{"name":"john"}'
$ id="${id#*\{}"  # remove everything through the first '{'
$ echo $id
"name":"john"}
$ id="${id%\}*}"  # remove everything starting with the last '}'
$ echo $id
"name":"john"
$ name="${id%:*}" # take everything before the ':'
$ name="${name//\"/}"  # remove quotes
$ echo $name
name
$ value="${id#*:}" # take everything after the ':'
$ value="${value//\"/}" # remove quotes
$ echo $value
john

Все это описано в разделе «Расширение параметров» в руководстве bash . Например, ${parameter#word}вместо Remove matching prefix patternудалит текст wordс начала $parameter. Точно так же %удаляет суффикс. //заменяет все вхождения строки на то, что идет после нее (в приведенном выше примере ${foo//\"/}, кавычки (, которые должны быть экранированы, поэтому отображаются как\")заменяются пустой строкой ). Вы должны выполнять каждую замену отдельно, хотя :вы не можете удалить начало и конец строки одной командой.

Вы также, вероятно, заметили, что вам нужно экранировать специальные символы, такие как }, {и ". Пока вы помните, что это правильно, вы можете написать код, подобный этому, довольно легко, но, как бы просто это ни было, он имеет тенденцию к написанию -только кода. Когда вы вернетесь к этому коду через год или два, чтобы снова -использовать его, вы посмотрите на что-то вроде #*\{}и подумаете про себя: Что это вообще значит? , а затем просто скопируйте его вслепую в новый проект, и тогда ваш код слегка сломается, потому что он встретит специальные символы, которых вы не ожидали.

Приведенные выше примеры не работают, если в парах значений вашего имени -есть специальные символы, такие как фигурные скобки, экранированные кавычки, двоеточия или, возможно, другие символы. Таким образом, это будет хорошо работать для быстрого -и -грязного извлечения или варианта использования 80%, но вам действительно не следует использовать его в производстве или в любое время, когда вам нужно убедиться, что он всегда работает с любым вводом.

Даже без операторов echo, показывающих, что происходит, вы можете видеть, что этот код уже длиннее, чем примеры в другом ответе, которые показывают, как это сделать правильно. Таким образом, не используя сторонний -инструмент, вы даете себе больше кода для написания, что займет у вас больше времени как для написания, так и для отладки, и вы также в конечном итоге получаете менее гибкое решение, которое прервется при обнаружении чего-то неожиданного.

0
10.08.2021, 21:19
0 ответов

Теги

Похожие вопросы