bash中的简单“printf”会导致输出错误

bash中的简单“printf”会导致输出错误,bash,printf,Bash,Printf,我是这里的新手。我真的试过用谷歌搜索,但失败了 我有一个简单的脚本,它逐行读取文件,然后打印出来。b、 txt的第一行是02083192846 #!/bin/bash while IFS= read -r line; do printf 'downloading %s .html\n' $line done < "$1" 一旦解决了这个问题,我的下一个问题是如何将这一行用作某些命令将存储到的文件名的一部分。i、 e.文件名应为02083192846.html。我尝试将其设置为${

我是这里的新手。我真的试过用谷歌搜索,但失败了

我有一个简单的脚本,它逐行读取文件,然后打印出来。b、 txt的第一行是02083192846

#!/bin/bash
while IFS= read -r line; do
    printf 'downloading %s .html\n' $line
done < "$1"
一旦解决了这个问题,我的下一个问题是如何将这一行用作某些命令将存储到的文件名的一部分。i、 e.文件名应为02083192846.html。我尝试将其设置为${line}.html,但它不起作用。例如,grepfoo-f${line}.html不起作用。但是卷曲http://foo -o$line.html仍然有效

我会做什么:

#!/bin/bash
while IFS= read -r line; do
    printf 'downloading %s .html\n' "${line//$'\r'/}"
    #                                      ________  
done < "$1"
    #                                          ^ 
    #                          remove \r with bash parameter expansion

文件有Windows行结尾\r\n,而不仅仅是\r\n。请使用dos2unix或类似工具。感谢您的及时帮助!事实上,这是多么愚蠢。用cat b.txt | tr-d'\015'>a.txt修复了堆栈上的问题!
#!/bin/bash
while IFS= read -r line; do
    printf 'downloading %s .html\n' "${line//$'\r'/}"
    #                                      ________  
done < "$1"
    #                                          ^ 
    #                          remove \r with bash parameter expansion