bash форматирование строки в кавычках - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь обобщить команду внутри сценария bash, но я застрял с некоторым форматированием строк. Код, который я пытаюсь воссоздать (который работает)

curl -X POST -H 'Content-Type: application/json' $CLUSTER -d '{
      "source" : "s3://blah/part-00004-9d2ba62f-496e-4cfd-9001-f40f0e33e927-c000.csv",
      "format" : "csv"
    }'

с помощью приведенной ниже команды (которая не работает)

filename='part-00004-9d2ba62f-496e-4cfd-9001-f40f0e33e927-c000.csv'
curl -X POST -H 'Content-Type: application/json' $CLUSTER -d '{
    "source" : "s3://blah/$filename",
    "format" : "csv"
    }'

Я также попробовал совет от Расширение переменных внутри одинарных кавычек в команде в Bash, но это не сработало.

"source" : '"s3://blah/$filename"',

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Попробуйте следующее (см. "'"):

filename='part-00004-9d2ba62f-496e-4cfd-9001-f40f0e33e927-c000.csv'
curl -X POST -H 'Content-Type: application/json' $CLUSTER -d '{
    "source" : "'"s3://blah/$filename"'",
    "format" : "csv"
    }'

Первый "'" - это «символ двойной кавычки для аргумента -d, отключить экранирование одинарной кавычки, начать экранирование двойной кавычки». Второй "'" похож.

0 голосов
/ 10 июля 2020

Я поклонник использования jq для построения JSON из значений, предоставленных пользователем, в сценариях оболочки, таким образом, если ваше имя файла (или что-то еще) имеет в нем какие-либо символы, которые требуют специальной обработки в JSON, он будет обработан автоматически. Что-то вроде

filename='part-00004-9d2ba62f-496e-4cfd-9001-f40f0e33e927-c000.csv'
curl -X POST \
  -H 'Content-Type: application/json' \
  "$CLUSTER" \
  -d "$(jq -n --arg filename "$filename" '{source:"s3://blah/\($filename)",format:"csv"}')"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...