curl命令与bash中分配给变量的curl不同

时间:2014-03-11 02:00:12

标签: bash curl

当我将curl作为命令运行时,我得到的结果略有不同,而不是将其输出放在变量中然后读取变量。

1

x=`curl http://www.movies.com/rss-feeds/top-ten-box-office-rss 2> /dev/null`; echo $x

2

curl http://www.movies.com/rss-feeds/top-ten-box-office-rss 2> /dev/null

它们之间的区别在于,当我做2时,我得到所有内容并且它都是格式化的,并且当我使用选项1时,除了是一个块之外,我还会错过以下所有内容(对于每部电影):

<pubDate>Tue, 04 Mar 2014 08:00:00 GMT</pubDate>
      <source url="http://www.movies.com">Movies.com Top 10 Box Office</source>
    </item>
    <item>
      <title><![CDATA[10. Ride Along - $2.0M]]></title>

我在这里看到了类似的问题(In ShellScript Assign Variable Based on Curl Output),但是当我尝试提出的解决方案时,我得到了同样的区别。阅读(和尝试)标志并没有帮助。

为真正的初学者问题道歉。

2 个答案:

答案 0 :(得分:2)

使用:

echo "$x"

以防止$x的分词。

一般情况下,除非您知道它们不包含空格或通配符,或者您明确希望处理这些字符,否则应引用变量。

答案 1 :(得分:1)

使用echo $x(版本1),x的内容作为echo的参数放在命令行上,并根据shell规则进行解释,然后回显给终端。使用echo "$x"来阻止此操作。

通过这一次更改,这两种方法将生成仅由一个字符组成的输出:最终换行符。处理反引号时shell会删除该字符。 man bash记录了这一点:

  

Bash通过执行命令和执行扩展          用标准替换命令替换          命令的输出,带有任何尾随换行符          删除。嵌入的换行不会被删除,但它们会被删除          可能会在分词过程中删除。