Bash url中命令中的数组变量
我对bash脚本中的url格式有问题。在下面的代码url请求中:Bash url中命令中的数组变量,bash,Bash,我对bash脚本中的url格式有问题。在下面的代码url请求中: text="$(lynx --dump https://address/"${array[${i}]}")" 返回HTTP错误400。请求URL无效。我想是在 "${array[${i}]}" url部分有问题。但我不知道什么是正确的格式 #!/bin/bash saveIFS="$IFS" IFS=$'\n' array=($(<words)) IFS="$saveIFS" elements=${#array[@]
text="$(lynx --dump https://address/"${array[${i}]}")"
返回HTTP错误400。请求URL无效。我想是在
"${array[${i}]}"
url部分有问题。但我不知道什么是正确的格式
#!/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
尝试
未使用array=$Try设置数组变量
数组变量没有设置为array=$您根本不需要数组;假设您每行有一个URL组件,则以下内容将在任何与POSIX兼容的shell中工作:
while IFS= read -r line; do
text=$(lynx --dump https://address/"$line")
echo "$text"
done < words >> output filename
你根本不需要数组;假设您每行有一个URL组件,则以下内容将在任何与POSIX兼容的shell中工作:
while IFS= read -r line; do
text=$(lynx --dump https://address/"$line")
echo "$text"
done < words >> output filename
我的两分钱。。。
我更喜欢使用printf-v来实现这一点,它可以像过滤器一样构建:
我的两分钱。。。
我更喜欢使用printf-v来实现这一点,它可以像过滤器一样构建:
我正在读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
我正在读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
不要调用lynx,而是尝试text=$echohttps://address/${array[${i}]},那么您可能会得到更好的线索。1如果某行包含全局字符,它将被展开。使用readarray将文件的行读取到数组中。2您根本不需要存储线路。只需在它们上面循环:。不要调用lynx,而是尝试text=$echohttps://address/${array[${i}]},那么您可能会得到更好的线索。1如果某行包含全局字符,它将被展开。使用readarray将文件的行读取到数组中。2您根本不需要存储线路。只需在它们上面循环:。您可以编写${array[i]}而不是${array[${i}]}!你可以写${array[i]}而不是${array[${i}}}!正确,printf-v仅在以下条件下工作。不管怎样,我喜欢用它们+1表示使用STDIO的正确方式,但text=$…echo$text是无用的!Yoiu只能使用lynx-dump$url来处理这个问题;它确保文本后面有一个换行符,所以不,不是完全无用的。正确,printf-v只在下面工作。不管怎样,我喜欢用它们+1表示使用STDIO的正确方式,但text=$…echo$text是无用的!Yoiu只能使用lynx-dump$url来处理这个问题;它确保文本后面有一个换行符,所以不,不是完全无用的。