在bash脚本中传递环境变量以获取需要用双引号引起来的值

时间:2020-04-24 09:00:17

标签: json bash curl special-characters

我正在处理bash脚本,并且有一个curl cmd:

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

对于上述curl cmd中的密码test123,我想将其作为环境变量传递。 尝试过以下方法,但无法正常工作。

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

请在这里建议可能出什么问题,以及如何在curl cmd的post JSON参数中转义双引号?

2 个答案:

答案 0 :(得分:1)

您可以这样写:

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

(如果密码包含"之类的字符,这将不起作用。我不知道JSON逃逸"和其他特殊字符的语法,所以我不能再发表评论了。)

答案 1 :(得分:0)

您使用了单引号。 Bash允许两种不同的报价机制:

单引号:包含的所有内容均为文字。 双引号:解释$和\,将其余部分作为文字传递。

您的bash环境变量$ new_pswrd用单引号引起来,不会被扩展,但是将以美元符号和字母new_pswrd的形式传递。

有两种方法可以实现您的目标:

使用单引号:'将单引号''结束,并将$ variable放在双引号中'',并且bash会连接所有字符串'“,因为它们在”“或”-“之间没有空格。

使用双引号:“在\“双引号\”内时将解释反斜线,并且反斜线将导致以下字符(即使它是双引号)也可以通过而不会关闭文字\。美元符号将被扩展,而$ shell_variable将被其值替换,而\ $ shell_variable将不会。”