Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash url中命令中的数组变量_Bash - Fatal编程技术网

Bash 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[@]

我对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[@]}

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来处理这个问题;它确保文本后面有一个换行符,所以不,不是完全无用的。