Передача переменной окружения в сценарий bash для значения, которое должно иметь двойные кавычки - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над сценарием bash и у меня есть curl cmd:

curl -u root:$pass -X PUT -H "Content-Type:application/json" http://$ip/nitro/ \
  -d '{"user":{"username":"test","password":"test123" }}' -k

Для пароля test123 в приведенном выше curl cmd я хочу передать его как переменную среды. Пробовал следующие способы, но это не работает.

curl -u root:$pass -X PUT -H "Content-Type:application/json" http://$ip/nitro/ \
  -d '{"user":{"username":"test","password":$new_pswrd }}' -k

curl -u root:$pass -X PUT -H "Content-Type:application/json" http://$ip/nitro/ \
  -d '{"user":{"username":"test","password":\"$new_pswrd\" }}' -k

Пожалуйста, предложите, что может быть не так, и как я могу избежать двойных кавычек в параметре post JSON для curl cmd?

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете написать так:

[STEP 101] $ pass=test123
[STEP 102] $ echo '{"user":{"username":"test","password":"'"$pass"'" }}'
{"user":{"username":"test","password":"test123" }}
[STEP 103] $

(Это не будет работать, если пароль содержит символы типа ". Я не знаю синтаксис для JSON для экранирования " и другие специальные символы, поэтому я не могу комментировать больше.)

0 голосов
/ 24 апреля 2020

Вы использовали одинарные кавычки. Bash допускает два разных механизма цитирования:

Одинарная кавычка: Все, что заключено, является буквальным. Двойные кавычки: интерпретировать $ и \, передать остаток как литерал.

Ваша bash переменная окружения $ new_pswrd находится в одинарных кавычках и НЕ будет расширена, но будет передана как знак доллара и буквы new_pswrd .

Есть два способа достижения вашей цели:

Использование одинарных кавычек: 'Завершить одинарную кавычку' "и поместить переменную $ в двойные кавычки" ", а bash объединит все строк "потому что им не хватает пробела между" "открывающими и закрывающими кавычками" _or_lack_white_space_entirely.

Использование двойных кавычек: "Бэксл sh будет интерпретироваться, когда внутри \" двойных кавычек \ "и backsla sh приведет к тому, что следующий символ, даже если это двойная кавычка, будет пропущен без закрытия литерала \ ". Знаки доллара будут расширены, и $ shell_variable будет заменен его значением, а \ $ shell_variable - нет. "

...