30

Попытка получить передачу, чтобы уведомить, когда загрузка завершена.

Это работает:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "$TR_TORRENT_NAME", \
  "body": "$TR_TORRENT_NAME completed."}'

... за исключением того, что он выдвигает $TR_TORRENT_NAME а не фактическое содержимое этой переменной.

Нужно ли мне избежать какой-то цитаты или что-то?

2 ответа2

49

Внутри одинарных кавычек оболочка ничего не расширяет. Поместите их в двойные кавычки:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": "'"$TR_TORRENT_NAME completed"'."}'

Давайте рассмотрим, как это работает, посмотрев на:

$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}

Когда появляется переменная оболочки, она всегда находится в двойных кавычках. Следовательно, он должным образом расширен.

Цитировать это немного неуловимо. У нас есть строки в одинарных кавычках, которые содержат двойные кавычки в виде символов и находятся рядом со строками в двойных кавычках. Чтобы лучше это понять, давайте возьмем этот фрагмент в качестве примера:

 "'"$TR_TORRENT_NAME"'"

Взять каждого персонажа по очереди:

  1. " является буквенным символом двойной кавычки, который находится внутри строки в одинарных кавычках. (Для краткости начало этой строки не показано в этом фрагменте.)

  2. ' закрывает строку в одинарных кавычках

  3. " открывает строку в двойных кавычках.

  4. $TR_TORRENT_NAME - это переменная оболочки, которая раскрывается в двойных кавычках.

  5. " закрывает строку в двойных кавычках.

  6. ' открывает новую строку в одинарных кавычках.

  7. msgstr " помещает символ двойной кавычки внутри строки в одинарных кавычках.

1

Чтобы включить переменную окружения в завиток строки bash без кавычек вокруг содержимого переменной, это сработало для меня:

--header 'PRIVATE-TOKEN: '"$PRIVATE_TOKEN"''

Или используя сценарий, который был впервые описан без кавычек вокруг поля тела:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": '"$TR_TORRENT_NAME completed"'.}'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .