переменная раскрытия внутри одной строки двойной кавычки - PullRequest
0 голосов
/ 15 января 2020

Мне нужно раскрыть значение переменной внутри строки.

Проблема в том, что эта строка заключена в одинарные кавычки и заключает в себе строку в двойных кавычках:

checksum256=$sha256sum $filename
curl -X POST \
  'http://localhost:8080/documents?application=RDOCUI&user=nif' \
  -F docFile=@/home/jeusdi/projects/repositori-digital/stress/randomfile4b7f12a2-2cb0-49e3-b02b-1ededaa281e5.txt \
  -F 'docAttributes={
   "confidential":"N",
   "transactionId": "sdf",
   "codiDirCorp": "CorpCode",
   "expiration": "10/10/2025",
   "description": "desc",
   "locked": "N",
   "title": "titol",
   "docHash": "${checksum256}"  <<<<<<<<<<<<<<<<<< THE PROBLEM IS HERE
}'

checksum256 не раскрыто.

Позаботьтесь о том, чтобы это расширение находилось внутри строки в одинарных кавычках и в то же время внутри строки в двойных кавычках:

'"$expansion"'

Есть идеи?

1 Ответ

0 голосов
/ 15 января 2020

Не используйте одинарные кавычки. Двойные кавычки внутри одинарных кавычек являются лишь частью значения, например a или 1. Они не говорят оболочке расширять кавычку, потому что они не shell кавычки.

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

-F "docAttributes={...,\"docHash\": \"$checksum256\" ...}"

Или еще лучше, используйте jq, чтобы безопасно сгенерировать для вас значение JSON. (Выше может произойти сбой, если само значение checksum256 содержит двойные кавычки.)

attrs=$(jq -n --arg ck "$checksum256" '{confidential: "N", ..., docHash: $k}')
curl -X POST ... -F "docAttributes=$attrs"
...