Linux - 如何在 cURL 中使用函数? [复制]
Posted
技术标签:
【中文标题】Linux - 如何在 cURL 中使用函数? [复制]【英文标题】:Linux - How to use a function in cURL? [duplicate] 【发布时间】:2019-02-26 09:31:14 【问题描述】:我正在尝试在 shell 脚本中使用 curl 设置电子邮件群发。
我面临的问题是我必须设置一个函数才能使用 $f2 但无法让该函数在 curl 循环中工作。
我尝试在函数中执行“回显”,并从电子邮件文本中删除 $,但仍然没有。
它只是输出一个空白的电子邮件。
function emailtext() "Dear $f2, Testing some Mailgun awesomeness!"
paste $emaillist $namelist | while IFS="$(printf '\t')" read -r f1 f2
do
curl -s --user 'api:YOUR_API_KEY' \
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
-F from='Excited User <mailgun@YOUR_DOMAIN_NAME>' \
-F to=$f1 \
-F subject='Hello' \
-F text='$emailtext'
done
【问题讨论】:
IFS=$'\t'
比IFS=$(printf '\t')
高效得多。顺便说一句,我不是在之前围绕相同代码的问题中向您展示了一种完全避免paste
的方法吗?
...嗯,也许不是你。那你从哪里得到这个代码的?另一个人有同样的变量名,同样的傻printf
成语等等。
...啊,它是***.com/questions/52435330/… - 请参阅那里建议的其他通用改进。此外,通过shellcheck.net 运行所有内容并修复它识别的错误;特别是,您缺少很多引号。
顺便说一句,另见wiki.bash-hackers.org/scripting/obsolete re: 函数声明语法——最好写emailtext()
,不带function
,以与实现POSIX sh标准的shell兼容;如果您确实坚持使用function
,则省略()
以与旧版ksh 兼容(与POSIX 之前的ksh 兼容是bash 在第一个允许使用function
关键字的原因地方)。现在,你两者都不兼容。
【参考方案1】:
函数像命令一样被调用,而不是变量。因此:
-F text="$(emailtext)"
还要注意,函数包含命令。你当前的函数定义除了抛出一个command not found
错误之外不会做任何事情。
将参数显式传递给函数会比依赖共享变量更好:
emailtext() echo "Dear $1, testing some awesomeness";
curl ... -F text="$(emailtext "$f2")"
【讨论】:
以上是关于Linux - 如何在 cURL 中使用函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux/Mac 中更新 PHP curl 扩展?