Bash:curl:URL中的非法字符

Bash:curl:URL中的非法字符,bash,csv,curl,Bash,Csv,Curl,我有一个包含URL列的文件,我使用以下bash脚本读取该文件: while read line do result=`curl $line -I | grep HTTP/1.1` # save the curl result printf '%s,%s\n' $line $result >> output.csv done < $input_file 读取行时 做 result=`curl$line-I | grep HTTP/1.1`#保存

我有一个包含URL列的文件,我使用以下bash脚本读取该文件:

while read line
do
        result=`curl $line -I | grep HTTP/1.1` # save the curl result
        printf '%s,%s\n' $line $result >> output.csv

done < $input_file
读取行时
做
result=`curl$line-I | grep HTTP/1.1`#保存curl结果
printf“%s,%s\n'$line$result>>output.csv
完成<$input\u文件
当我运行脚本时,我得到了错误:curl:(3)在URL中发现非法字符


我的URL示例如下:
http://stackoverflow.com/

我不确定它是否解决了您的问题,但以下是基于我的评论的答案:

替换您的
result='curl$line-I | grep HTTP/1.1'

使用:
result=$(curl$line-I | grep HTTP/1.1)

为了安全起见,请将grep文本放在qoutes中,并使用如下变量:

result=$(curl ${line} -I | grep "HTTP/1.1")

那么
result=$(curl$line-I | grep HTTP/1.1)
呢?@fvu No.当然你可以在backticks中使用管道,而你链接的Q基本上是关于在变量中存储带有管道的命令。不过,用
$(…)
替换反勾号会更现代。@TonyGW我感觉您遇到了引用问题。尝试在所有内容周围加上适当的引号:
而IFS=''read-r line
result=$(curl“$line”-I|grep“HTTP/1.1”)
printf”%q,%q\n“$line”$result”>>output.csv
,并告诉我们问题是否仍然出现。