【问题标题】:bash difference between variable assignment directly and read by while loop from a filebash 直接变量赋值和通过while循环从文件中读取的区别
【发布时间】:2018-07-14 19:48:35
【问题描述】:

直接变量赋值和通过while循环从bash中的文件读取是有区别的。请参见下面的示例。 url1url2 是不同的。如何将url1 设为url2 代表bash 中的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

【问题讨论】:

  • 我已经使用 bash v4.4.23 执行了您的代码,并且 url1 打印正确。你用的是什么外壳?
  • @hnicke GNU bash,版本 4.4.12(1)-release (x86_64-pc-linux-gnu) 在 Debian 拉伸中

标签: bash shell


【解决方案1】:

我怀疑你的行尾有问题。您的输出表明该脚本使用 Windows 行结尾,$MGRAST_ID 拾取一个杂散的回车。

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

【讨论】:

  • 在 debian 中,GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
猜你喜欢
  • 2019-02-28
  • 2011-07-12
  • 2019-03-23
  • 2019-06-09
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多