我需要使用curl读取某些数据.我基本上是从文件中读取关键字
while read line
do
curl 'https://gdata.youtube.com/feeds/api/users/'"${line}"'/subscriptions?v=2&alt=json' \
> '/home/user/archive/'"$line"
done < textfile.txt
Run Code Online (Sandbox Code Playgroud)
无论如何,我还没有找到一种方法来形成卷曲的网址,所以它会工作.我尝试过所有可能的单引号和双引号版本.我基本上尝试过:
'...'"$line"'...'
"..."${line}"..."
'...'$line'...'
Run Code Online (Sandbox Code Playgroud)
等等.只需命名它,我很确定我已经尝试过了.
当我在最佳情况下打印出URL时,它将形成为:
/subscriptions?v=2&alt=jsoneeds/api/users/KEYWORD FROM FILE
Run Code Online (Sandbox Code Playgroud)
或类似的东西.如果您知道可能是什么原因,我将非常感谢您提供的信息.谢谢!
Gor*_*son 18
这不是引用问题.问题是你的关键字文件是DOS格式 - 也就是说,每一行以回车符和换行符(\ r \n)结束,而不仅仅是换行符(\n).回车符被读入行变量,并包含在URL中.赠品是当你回应它时,它似乎打印:
/subscriptions?v=2&alt=jsoneeds/api/users/KEYWORD FROM FILE"
Run Code Online (Sandbox Code Playgroud)
但它真的打印:
https://gdata.youtube.com/feeds/api/users/KEYWORD FROM FILE
/subscriptions?v=2&alt=json
Run Code Online (Sandbox Code Playgroud)
......他们之间只有一个回车,所以第二个覆盖第一个.
所以你对此能做些什么?这是在行尾修剪cr的一种相当简单的方法:
cr=$'\r'
while read line
do
line="${line%$cr}"
curl "https://gdata.youtube.com/feeds/api/users/${line}/subscriptions?v=2&alt=json" \
> "/home/user/archive/$line"
done < textfile.txt
Run Code Online (Sandbox Code Playgroud)
Fre*_*Foo 16
我想你当前的版本应该可行.更优雅的是在整个URL周围使用一对双引号,变量位于${}
:
"https://gdata.youtube.com/feeds/api/users/${line}/subscriptions?v=2&alt=json"
Run Code Online (Sandbox Code Playgroud)
小智 5
就这样使用它,应该足够了:
curl "https://gdata.youtube.com/feeds/api/users/${line}/subscriptions?v=2&alt=json" > "/home/user/archive/${line}"
Run Code Online (Sandbox Code Playgroud)
如果你的shell给你带来的问题&
只是put \&
,但没有它我的工作正常.