Ваша конфигурация dpkg
в вашей системе Ubuntu, а именно директива path-exclude=/usr/share/man/*
в /etc/dpkg/dpkg.cfg.d/excludes
, предписывает с dpkg
по не устанавливать справочные страницы.
Если вы хотите установить справочные страницы, удалите соответствующую строку и установите пакет заново.
Вы можете использовать документ ЗДЕСЬ, как показано ниже:
echo "$(cat <<EOM
{ "result" : "$awkresult" }
EOM
)" > result.json
Обратите внимание на двойные -кавычки «в операторе echo, он сохраняет все символы новой строки, и вам не нужно экранировать кавычки \» внутри.
Ваша идея была правильной, но не используйте двойные -кавычки для кодирования строки JSON. Используйте одинарные кавычки вокруг {..}
, используйте специальную последовательность кавычек, чтобы расширить awkresult
внутри одинарных кавычек
awkresult='foo\nbar\nzoo\n'
теперь используйте переменную как
echo '{ "result": "'"$awkresult"'" }' > result.json
Также помните, что спецификация JSON «не» позволяет встраивать буквальные управляющие символы новой строки. Вы можете проверить, действителен ли фрагмент JSON
echo '{ "result": "'"$awkresult"'" }' | jq.
{
"result": "foo\nboo\nbar\n"
}
Код, который вы уже опубликовали, сохранит новые строки в$awkresult
:
$ awkresult='foo
bar'
$ echo "{ \"result\": \"$awkresult\" }"
{ "result": "foo
bar" }
но есть более простой, надежный и переносимый способ сделать то же самое:
awkresult="$(awk '{...}')"
printf '{ "result": "%s" }\n' "$awkresult" > result.jso
Или вы имели в виду, что вам нужно заменить новые строки \n
строками, подобными этой
$ printf '{ "result": "%q" }\n' "$awkresult"
{ "result": "$'foo\nbar'" }
или что-то другое?
Обратите внимание, что новые строки в значениях должны быть закодированы как \n
в JSON. Парсер JSON декодирует их как настоящие новые строки. Вставка литерала новой строки в значение в файле JSON приведет к повреждению документа JSON.
Использованиеjo
(инструмента для генерации вывода JSON в оболочке с правильной кодировкой и т. д.):
awkresult='some string
with newlines
the end'
jo result="$awkresult"
Это приведет к выводу
{"result":"some string\nwith newlines\nthe end"}
Для красивой печати:
jo -p result="$awkresult"
, что приводит к
{
"result": "some string\nwith newlines\nthe end"
}
Перенаправить вывод jo
в файл для сохранения вывода, например.
jo result="$awkresult" >result.json