Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有关bash文件读取EOL EOF的意外行为_Bash_File Io - Fatal编程技术网

有关bash文件读取EOL EOF的意外行为

有关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 我

我在读取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
我有以下结果:

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文件
对其进行“清理”。