如何在while(bash)中通过管道滑动多个变量?

时间:2018-12-31 04:28:28

标签: bash shell while-loop

我正在使用bash通过wget下载文件并自动更改文件名,但是当我使用|(它是space pipe space)来区分变量时,它总是使用以下命令读取文件名的第一部分空间

这是我的脚本,我使用while read -r fileName ' | ' url来读取我的download.list文件

#!/usr/bin/env bash

set -e

IFS=' | '    

while read -r fileName url
do
    wget $url -O $fileName
done < download.list

exit 0

这是我的download.list中的示例文本 MR HH GD | https://example/xxxx.zip 我希望我能得到MR HH GD.zip,但实际上它给了我这个: ME.zip

1 个答案:

答案 0 :(得分:1)

我不知道您是如何通过read命令的。在bash(1)的“ SHELL BUILTIN COMMANDS”部分中,将读取命令定义为接受变量名称作为参数,而不是纯文本。

您可以像这样使用IFS,但是您必须自己删除所有不需要的空格。

while IFS='|' read -r fileName url
do
    echo ">$fileName<"
    echo ">$url<"
done < download.list
您的download.list中的

MR HH GD | https://example/xxxx.zip将输出

>MR HH GD <
> https://example/xxxx.zip<