从Windows bash中形成的文本文件中读取内容

这个问题在这里已经有了答案:

  • 如何连接Bash中的字符串变量27个答案

  • 这听起来像你的id_numbers.txt文件具有DOS / Windows风格的行结束符(回车符后面是换行字符),而不是普通的unix行结束符(只是换行符)。 结果是, read认为该行以回车结束, $line实际上在最后有一个回车符,并且嵌入在url中,导致各种混淆。

    有几种方法可以解决这个问题。 当你使用它时,你可以使用bash修改变量的回车符:

    url="http://www.rcsb.org/pdb/files/${line%$'r'}.pdb"
    

    或者你可以有read的告诉它回车计为空白(修剪read将削减领先,并从它读取尾随空白):

    while IFS=$'r' read line
    

    或者你可以使用像dos2unix这样的命令(或者你的操作系统上的任何等效命令)来转换id_numbers.txt文件。


    -e echo选项用于在不插入新行的情况下输出所需内容,在此不需要。

    另外我怀疑你的文件包含的ID是畸形的,你在哪个操作系统上创建了它?

    无论如何,你可以这样简化你的脚本:

    !/bin/bash
    
    while read line
    do
        wget "http://www.rcsb.org/pdb/files/$line.pdb"
    done < id_numbers.txt
    

    我能够用id_numbers.txt生成的id_numbers.txt文件成功测试它:

    for i in $(0 9) ; do echo "$i" >> id_numbers.txt ; done
    

    尝试这个:

    url="http://www.rcsb.org/pdb/files/"$line
    $url=$url".pdb"
    

    有关更多信息,请查看如何连接Bash中的字符串变量?

    链接地址: http://www.djcxy.com/p/29125.html

    上一篇: Read content from text file formed in Windows in Linux bash

    下一篇: Concatenating variables in Bash