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 扩展?

如何在linux中curl.h相关的头文件和库?

Windows下如何使用curl命令?

在 Linux 中使用 cURL 进行 HTTP POST 和 GET [重复]

如何删除linux curl 命令行

简单备忘一下Linux下的wget和curl如何使用http proxy