直接变量分配与从bash中的文件的while循环读取之间存在区别。请参见下面的示例。 url1
和url2
不同。如何使bash的url1
循环中的url2
为while
呢?谢谢。
在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
答案 0 :(得分:1)
我怀疑您的行尾有问题。您的输出表明脚本使用Windows行尾,$MGRAST_ID
拾取流回车符。
如果通过dos2unix
运行脚本,则脚本应按预期运行。您还需要将文本编辑器设置为使用Unix行尾。