легкий ответ изменить вид цитаты вы используете:
curl -X POST --data-urlencode \
'payload={"text": "I want to print an environment variable here, eg a path: '"$PATH"'"}' \
https://someapi.com/
Следует отметить, что это до сих пор использует единым (поэтому вам не нужно менять свою полезную нагрузку), но затем он заканчивает одинарные кавычки, запускает двойные кавычки и вставляет вашу замену в эти двойные кавычки (перед их окончанием и переключением на одиночные кавычки, в которых буквальные - а не синтаксические - двойные кавычки могут быть встроенный).
Вариант такого подхода, что позволяет избежать необходимости в синтаксические кавычки, смешанных в содержание документа, это использовал без кавычек Heredoc, as advised by @chepner in the comments:
curl -X POST --data-urlencode @- https://someapi.com/ <<EOF
payload={"text": "I want to print an environment variable here, eg a path: $PATH"}
EOF
лучше ответа заключается в использовании инструмент, который умеет форматировать JSON; jq - широко популярный выбор. Рассмотрим следующий пример:
text="I want to print an environment variable here, eg a path: \"$PATH\""
curl -X POST --data-urlencode @- https://someapi.com/ <<EOF
payload=$(printf '%s\n' "$text" | jq -R '{text: .}')
EOF
Таким образом, вы гарантированно правильный выход, даже если ваша переменная среды содержит обратную косую черту, буквальные цитаты, непечатаемые символы, или что-то еще может прийти.
Если ваше намерение состоит в том, чтобы результат был действительным JSON, это, вероятно, не самый подходящий способ для этого - вы захотите использовать инструмент, поддерживающий формат, или же удивительные значения PATH могут привести к недопустимому содержимому (в лучшем случае) или инъекционные атаки на вашу полезную нагрузку (в худшем случае). –
Фактически не используется переменная пути, просто пример. Спасибо за ваш вклад. – isaac