当我将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),但是当我尝试提出的解决方案时,我得到了同样的区别。阅读(和尝试)标志并没有帮助。
为真正的初学者问题道歉。
答案 0 :(得分:2)
使用:
echo "$x"
以防止$x
的分词。
一般情况下,除非您知道它们不包含空格或通配符,或者您明确希望处理这些字符,否则应引用变量。
答案 1 :(得分:1)
使用echo $x
(版本1),x
的内容作为echo
的参数放在命令行上,并根据shell规则进行解释,然后回显给终端。使用echo "$x"
来阻止此操作。
通过这一次更改,这两种方法将生成仅由一个字符组成的输出:最终换行符。处理反引号时shell会删除该字符。 man bash
记录了这一点:
Bash通过执行命令和执行扩展 用标准替换命令替换 命令的输出,带有任何尾随换行符 删除。嵌入的换行不会被删除,但它们会被删除 可能会在分词过程中删除。