嗨,大家好
我试图循环作为参数传递给脚本的文件(或多个文件)的值,./myscript file1 file2 ...
但awk
仅识别每个文件的第一行。
#!/bin/bash
while [[ ${#} > 0 ]]
do
for archivo in ${@}
do
read url filename <<<$(awk -F',' '{print $1, $2}' $archivo)
curl -o $filename $url
done
done
作为参数传递给脚本的文件具有以下结构:
url1,filename1
url2,filename2
...
目标是,每当使用一个或多个参数调用脚本时,awk
都应该解析(并传递)每个文件中包含的 url 和文件名,以便curl
下载列出的文件。关于如何使其发挥作用有什么建议吗?
提前致谢,祝您有愉快的一天!
答案1
除了循环结构似乎搞砸了(每个文件只读取一对url
- filename
)之外,未加引号的命令替换$(awk -F',' '{print $1, $2}' $archivo)
将在默认情况下进行分词IFS
,结果是 awk 输出为将连接到一行上。比较:
$ echo $(printf 'foo bar\nbaz bam\n')
foo bar baz bam
相对
$ echo "$(printf 'foo bar\nbaz bam\n')"
foo bar
baz bam
然而,这确实是 awk 的无用用途 - 您可以将 shell 设置IFS
为,
并直接读取文件。也许你想要的是:
for archivo in "$@"
do
while IFS=, read -r url filename rest
do
curl -o "$filename" "$url"
done < "$archivo"
done