bash 和变量命令替换的问题

bash 和变量命令替换的问题

我有一个 bash 脚本,它对 URL 执行curl 请求。所有curl标头和信息都包含在一个变量中,这是一个简化的示例

STRING="'http://www.mydomain.com/url' -H 'mydomain.com'"

我最初让脚本通过 echo 和 xargs 来传递它,但我一直在读到这可能不是一个好方法

我在尝试时遇到了问题curl $STRING,添加双引号使其curl "$STRING"现在给出了一个curl错误,指出“curl:(1)协议“'http”在libcurl中不支持或禁用”

我猜想我在这里忽略了一些简单的事情,可能与引号和空格有关(我之前尝试转义单引号,只是将它们逐字添加到字符串中)

如果我回显 $STRING ,它会将其显示为带有所有引号和单引号的书写形式,并且echo $STRING | xargs curl正确执行我想要的操作,它会在输入时使用我的字符串进行卷曲

答案1

有什么问题xargs,特别是如果它有效的话?

Shell 会删除不是任何扩展结果的引号,这意味着它不会删除因删除双引号而产生的单引号。使用数组代替:

args=('http://www.mydomain.com/url' -H 'mydomain.com')
curl "${args[@]}"

答案2

您的错误中的单词之前似乎有一个额外的引号http这可能会触发它。您应该在执行之前尝试回显字符串,以确保语法正确。

"curl: (1) Protocol "'http" not supported or disabled in libcurl"
                     ^

相关内容