Bash - обработка (одинарных) кавычек в переменных (для команды Curl) - PullRequest
0 голосов
/ 25 марта 2020

Я пишу скрипт, который использует CURL.

Есть некоторые заголовки HTTP, общие для всех запросов.

curl -X GET "..." -H  'accept: */*' -H "api-key: $API_KEY"

Поэтому я хотел бы поместить их в переменную:

HEADERS="-H  'accept: */*' -H \"api-key: $API_KEY\""

curl -X GET "..." $HEADERS      ### <-- This is what I want to achieve.

Как видите, для этого нужно сочетание

  • ' s, потому что он содержит *, который может расширяться,
  • " s, потому что есть переменная.

Я пробовал довольно много комбинаций экранирования, смешивания ' и ", создавая строку постепенно, но всегда я получаю Bash, добавляя нежелательные побеги или оставляя те, которые мне нужны.

Как мне добиться того, чтобы оба -H параметра (то есть все 4 аргумента) в переменной, которую я затем могу использовать в команде?

Есть несколько похожих вопросов, но они указаны c для других случаев.

1 Ответ

0 голосов
/ 25 марта 2020

Что вы хотите сделать, это сохранить список слов (например, -H или accept: */*) , где каждое слово может содержать пробельные символы . Поскольку bash разделяет слова в строке по пробелам (по умолчанию), сложно использовать строковую переменную для списка слов, которые могут содержать пробельные символы.

Простое решение использовать переменную списка . Каждый член списка является словом (и, таким образом, может содержать пробелы по мере необходимости). Расширяя этот список, обеспечьте правильное цитирование. В вашем случае:

declare -a HEADERS
HEADERS=(
  '-H' 'accept: */*'
  '-H' 'api-key: $API_KEY'
)
curl -X GET "..." "${HEADERS[@]}"

Помните символы "..." при расширении массива. Они гарантируют, что каждый элемент списка будет расширен как отдельное отдельное слово.

...