【发布时间】:2021-01-05 18:32:16
【问题描述】:
我正在编写简单的 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?
提前致谢
【问题讨论】:
-
你能用
bash -x yourscript和edit 运行这个问题来包含输出吗?您的代码没有完全遵循最佳实践——一个足够令人惊讶的电子邮件地址可能会生成无效的 JSON——但它应该工作,即便如此。 -
email="foo@mar.com" ; echo $(printf '{"email":"%s"}' $email) -
@Abelisto,...嗯,这有其自身的问题,主要是由于缺少引号。看看如果您的电子邮件地址中有来自
IFS的字符会发生什么(f/e:IFS=.; email='foo@bar.com'; echo $(printf '{"email": "%s"}' $email));如果你有一个可以被解析为全局表达式的值,那就忽略了会发生什么......