有关bash文件读取EOL EOF的意外行为
我在读取bash脚本中的文件时遇到一些问题 以下是我试图读取的文件:有关bash文件读取EOL EOF的意外行为,bash,file-io,Bash,File Io,我在读取bash脚本中的文件时遇到一些问题 以下是我试图读取的文件: --------------- (not in the file) 123.234 231.423 1223.23 132.134 --------------- (not in the file) 在此文件中,4个数字位于两个不同的行上,文件末尾有一行留空。每行末尾没有“空格”字符 当我尝试使用此脚本读取此文件时: for val in $(cat $myFile) do echo "$val "; done 我
--------------- (not in the file)
123.234 231.423
1223.23 132.134
--------------- (not in the file)
在此文件中,4个数字位于两个不同的行上,文件末尾有一行留空。每行末尾没有“空格”字符
当我尝试使用此脚本读取此文件时:
for val in $(cat $myFile)
do
echo "$val ";
done
我有以下结果:
123.234
231.423
1223.23
32.134
当我在变量后添加空格字符时,它会删除最后一个数字的开头
for val in $(cat ~/Windows/Trash/bashReadingBehavior/trashFile.out)
do
echo "$val ";
done
输出:
123.234
231.423
1223.23
2.134
事实上,在最后一个数字之后添加的字符写在最后一个数字的开头。我假设这是由不可见字符(如回车符或类似字符)引起的行为,但我不知道如何解决此问题。您的输入文件有DOS行结尾。当你执行
echo "$val "
$val
的值以回车符结尾,当打印时,回车符会在打印最后两个空格之前将光标移动到行的开头,这会覆盖行上已有的内容
您应该使用以下代码读取此文件(不要迭代cat
的输出):
也不建议像我所展示的那样使用
for
循环来迭代一行,但是在这种情况下,如果从文件读取并存储在REPLY
中的行是一个以空格分隔的数字列表,那么就可以了。您的输入文件有DOS行结尾。当你执行
echo "$val "
$val
的值以回车符结尾,当打印时,回车符会在打印最后两个空格之前将光标移动到行的开头,这会覆盖行上已有的内容
您应该使用以下代码读取此文件(不要迭代cat
的输出):
也不建议像我所展示的那样使用
for
循环来迭代一行,但是在这种情况下,如果从文件读取并存储在REPLY
中的行是一个以空格分隔的数字列表,那么就可以了。您的输入文件有DOS行结尾。当你执行
echo "$val "
$val
的值以回车符结尾,当打印时,回车符会在打印最后两个空格之前将光标移动到行的开头,这会覆盖行上已有的内容
您应该使用以下代码读取此文件(不要迭代cat
的输出):
也不建议像我所展示的那样使用
for
循环来迭代一行,但是在这种情况下,如果从文件读取并存储在REPLY
中的行是一个以空格分隔的数字列表,那么就可以了。您的输入文件有DOS行结尾。当你执行
echo "$val "
$val
的值以回车符结尾,当打印时,回车符会在打印最后两个空格之前将光标移动到行的开头,这会覆盖行上已有的内容
您应该使用以下代码读取此文件(不要迭代cat
的输出):
也不建议像我所展示的那样使用
for
循环来迭代一行,但是在这种情况下,如果从文件读取并存储在REPLY
中的行是一个以空格分隔的数字列表,那么就可以了。您提到了Windows。如果使用cat-vte文件
,是否会获得^M
字符?您可以使用dos2unix文件
来“清理”它。您提到的是Windows。如果使用cat-vte文件
,是否会获得^M
字符?您可以使用dos2unix文件
来“清理”它。您提到的是Windows。如果使用cat-vte文件
,是否会获得^M
字符?您可以使用dos2unix文件
来“清理”它。您提到的是Windows。如果使用cat-vte文件
,是否会获得^M
字符?您可以使用dos2unix文件
对其进行“清理”。