Как избежать точки с запятой в строке с помощью Bash

Это найдет все файлы в /dirи запуститmd5sum /dir/file

find /path/to/directory -type f -print0 | xargs -0I{} md5sum {}
1
24.10.2021, 22:49
1 ответ

У вас не хватает escape-символов в нескольких кавычках и обратной косой черты в конце.Было бы проще управлять цитированием, если бы вы использовали одинарные кавычки вокруг строки документа JSON.

Похоже, вы хотите вставить значения из переменной оболочки в документ JSON. Вы делаете это безопаснее сjq:

$ domain=my.domain.example.com
$ domainName=some-domain-name
$ JSON=$( jq -c -n --arg domain "$domain" --arg name "$domainName" '
{ "Comment": "Updating TXT record in \($domain)",
  "Changes": [ {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "_dmarc.\($name)", "Type": "TXT", "TTL": 3600,
        "ResourceRecords": [ { "Value": "\"v=DMARC1; p=reject; pct=100\"" } ]
      } } ] }' )

Команда jqиспользуется здесь для вставки значений двух переменных оболочки domainи domainNameв документ JSON строки -. Эти две переменные используются в командной строке для инициализации двух внутренних переменных jq, $domainи $nameсоответственно. На них ссылается документ JSON в строках, где они должны быть вставлены.

Такой подход гарантирует, что любые символы, требующие специального экранирования, будут правильно экранированы для включения в строки JSON в документе.

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

0
25.10.2021, 13:37

Теги

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