直接在变量分配与从文件的while循环读取之间的bash差异

时间:2018-07-14 11:03:46

标签: bash shell

直接变量分配与从bash中的文件的while循环读取之间存在区别。请参见下面的示例。 url1url2不同。如何使bash的url1循环中的url2while呢?谢谢。 在Debian的zsh 5.3.1 (x86_64-debian-linux-gnu)GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)中不起作用。

cat 1.csv(注意:1.csv的最后一行有一个新的空行。)

mgm4447943.3
mgm4447944.3

代码:

#! /bin/bash

while read -r MGRAST_ID; do

echo $MGRAST_ID
url1=http://api.metagenomics.anl.gov/1/download/${MGRAST_ID}?file=050.1
echo $url1

MGRAST_ID1="mgm4447943.3"
url2=http://api.metagenomics.anl.gov/1/download/${MGRAST_ID1}?file=050.1
echo $url2

done < 1.csv

输出将为

mgm4447943.3
?file=050.1metagenomics.anl.gov/1/download/mgm4447943.3
http://api.metagenomics.anl.gov/1/download/mgm4447943.3?file=050.1
mgm4447944.3
?file=050.1metagenomics.anl.gov/1/download/mgm44GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)47944.3
http://api.metagenomics.anl.gov/1/download/mgm4447943.3?file=050.1

1 个答案:

答案 0 :(得分:1)

我怀疑您的行尾有问题。您的输出表明脚本使用Windows行尾,$MGRAST_ID拾取流回车符。

如果通过dos2unix运行脚本,则脚本应按预期运行。您还需要将文本编辑器设置为使用Unix行尾。