我在bash脚本中的网址格式有问题。在下面的代码url请求中:
text="$(lynx --dump https://address/"${array[${i}]}")"
返回 HTTP错误400。请求URL无效。我认为
"${array[${i}]}"
网址部分有问题。但是我不知道什么是正确的格式。
#!/bin/bash
saveIFS="$IFS"
IFS=$'\n'
array=($(<words))
IFS="$saveIFS"
elements=${#array[@]}
for (( i=0;i<$elements;i++))
do
text="$(lynx --dump https://address/"${array[${i}]}")"
echo "$text" >> "outputfilename"
fi
done
我也尝试过:
text="$(lynx --dump https://address/${array[${i}]})"
答案 0 :(得分:2)
#!/bin/bash
IFS=$'\n' read -rd '' -a array <words
elements=${#array[@]}
for (( i=0;i<$elements;i++))
do
text="$(lynx --dump https://address/"${array[${i}]}")"
echo "$text" >> "outputfilename"
done
array=($(<words))
设置数组变量read
或readarray
,但是此示例与read
一起使用偶然地,将IFS=$'\n'
放在read
之前而没有命令分隔符;
仅将$IFS
设置为读取命令,从而省去了保存和重新设置{{1 }}
答案 1 :(得分:1)
您根本不需要数组;假设您每行只有一个URL组件,那么以下内容就可以在任何POSIX兼容的外壳程序中使用:
while IFS= read -r line; do
text=$(lynx --dump https://address/"$line")
echo "$text"
done < words >> output filename
答案 2 :(得分:1)
我更喜欢使用printf -v
,它可以像 filter 一样构建:
catWeb() {
while IFS= read -r word;do
printf -v url "https://address/%s" "$word"
lynx --dump "$url"
done
}
catWeb <words >outputfilename
答案 3 :(得分:0)
我正在读取Windows文件。行以CR LF结尾。所以地址包含
\r
字符。我可以删除它:
array[${i}]=${array[${i}]%$'\r'}
或者我可以重新格式化输入文件,使行仅以LF结尾。
从CR LF文件读取工作脚本的主要结构是
#!/bin/bash
IFS=$'\n' read -rd '' -a array <words
elements=${#array[@]}
for (( i=0;i<$elements;i++))
do
array[${i}]=${array[${i}]%$'\r'}
text="$(lynx --dump https://adrress/"${array[${i}]}")"
if [ ${#text} -gt 1 ]
then
echo "$text" >> "filename"
else
echo "${array[${i}]}" >> "filename2"
fi
done