【问题标题】:Linux - How to use a function in cURL? [duplicate]Linux - 如何在 cURL 中使用函数? [复制]
【发布时间】: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成语等等。
  • ...啊,它是stackoverflow.com/questions/52435330/… - 请参阅那里建议的其他通用改进。此外,通过shellcheck.net 运行所有内容并修复它识别的错误;特别是,您缺少很多引号。
  • 顺便说一句,另见wiki.bash-hackers.org/scripting/obsolete re: 函数声明语法——最好写emailtext() {,不带function,以与实现POSIX sh标准的shell兼容;如果您确实坚持使用function,则省略() 以与旧版ksh 兼容(与POSIX 之前的ksh 兼容是bash 在第一个允许使用function 关键字的原因地方)。现在,你两者都不兼容。

标签: bash function shell curl


【解决方案1】:

函数像命令一样被调用,而不是变量。因此:

-F text="$(emailtext)"

还要注意,函数包含命令。你当前的函数定义除了抛出一个command not found 错误之外不会做任何事情。


将参数显式传递给函数会比依赖共享变量更好:

emailtext() { echo "Dear $1, testing some awesomeness"; }

curl ... -F text="$(emailtext "$f2")"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 2011-03-02
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多