首页 > 解决方案 > bash 字符串插值返回空字符串

问题描述

我正在处理简单的 curl POST 脚本,我遇到了使用脚本中的数据初始化的变量的字符串插值问题。让我描述一下:

#!/bin/bash

EMAIL=$(source ./random_email_generator.sh) #this generates some random string 
echo "$EMAIL" #here email is printed well
curl --insecure --header "Content-Type: application/json" \
  --request POST \
  --data '{"email":'"$EMAIL"',"password":"validPassword"}' \ #problem lies here because email is always empty string 
 http:/ticketing.dev/api/users/signup 

总而言之,这里有很多引号和双引号,而且有点混淆,我该如何解析EMAIL的值来代替json body?

提前致谢

标签: linuxbash

解决方案


变量被正确插值。问题是你没有用双引号括起来,所以你创建了无效的 JSON。

curl --insecure --header "Content-Type: application/json" \
  --request POST \
  --data '{"email":"'"$EMAIL"'","password":"validPassword"}' \
  http:/ticketing.dev/api/users/signup 

当您想查看命令的实际外观时echocurl请将bash -x. 你会看到

--data {"email":foo@bar.com,"password":"validPassword"}

如果您使用该jq工具在 bash 脚本中操作 JSON 会更好。


推荐阅读