首页 > 解决方案 > 在循环中回显变量和附加文本

问题描述

我正在尝试逐行读取文件并将文本添加到每一行,然后再回显它们。

但是输出看起来总是错误的

link.txt 包含(末尾有换行符):

http://example.com/ddk.zip
http://example.com/453.zip
http://example.com/hth.zip
test=1; while read link; do echo "so $link wow $test"; done < link.txt
 wow 1p://example.com/ddk.zip
 wow 1p://example.com/453.zip
 wow 1p://example.com/hth.zip

奇怪的是,它在循环之外工作正常:

test=1; link=2; echo "so $link wow $test"
so 2 wow 1

我需要单行格式。

标签: bashloopsecho

解决方案


当您的文件具有 DOS 行结尾 ( \r\n) 时会发生这种情况。使用以下命令修复它,您的脚本将起作用:

dos2unix link.txt

或者如果您\r不想IFS修改,请添加link.txt

test=1
while IFS+=$'\r' read -r link; do
  echo "so $link wow $test"
done < link.txt

推荐阅读