我有一个非常奇怪的问题,我从未遇到过,也找不到与此处其他帖子相关的任何内容,我有一个shell脚本,它只会影响测试主机文件(一旦有效,将使用真正的一个) while循环但它只输出最后一行:
#!/bin/bash
while read line
do
grep $line /etc/test/hosts
done < temp-file.txt
这是/ etc / test / hosts文件:
device1 192.168.0.1
device2 192.168.0.2
device3 192.168.0.3
//切 device50 192.168.0.50
temp-file.txt与用于测试的测试主机文件相同
如上所述,这是输出 - 仅显示最后一行: device3 192.168.0.50
如果我将grep
命令更改为echo $line
,则输出正确。我已经尝试将测试主机文件中的行数更改为越来越少但结果相同。我也从cli完成了grep
命令,它可以在我grep
的每个设备上正常工作。我也尝试将$行放在双引号中,但也没有改变任何内容。
我还尝试了使用while IFS="\n"
方法的替代while循环但结果相同。这似乎应该非常简单,但我遇到了问题。我做错了什么,或者这可能是bash中的一个错误?
答案 0 :(得分:1)
溶液:
将sed -i 's/\r$//'
temp-file.txt添加到脚本顶部,以删除位于每行末尾的\ r。