>我有一个文件,其中包含稍后要打开的文件名列表。将行(文件名)加载到变量后,由于我不知道的原因,我以后无法将其作为文件打开。
这是我正在尝试执行的操作的简化示例:
主文件内容:
first_file.txt
second_file.txt
Bash 命令:
read line < $main_file # file with the list, received as an argument
echo $line # to check that correct filename has been read
cat $line # attempt to dump "first_file.txt" contents <- FAILS
cat first_file.txt # read "first_file.txt" contents manually
执行方法:
first_file.txt
: No such file or directory
*** this is 1st file's contents ***
*** ....
所以,cat first_file.txt
工作,$line
包含"first_file.txt",但cat $line
失败......
我显然误解了这里的东西,欢迎提出建议!
编辑:根据要求,以下是cat -v $main_file
的输出:
first_file.txt^M
second_file.txt^M
third_file.txt^M
^M
^M
^M
字符是回车符(又名 r
),并且通常是 Windows 行结尾的一部分。 当您echo
它们时,它们不会出现,但它们会破坏您打开文件的能力,其中包含末尾的文本。
最好的解决方案是从"主文件"中删除它们。 如果你有的话,你可以使用dos2unix
工具,或者你可以像sed -i -e 's/s+$//g' $main_file
一样使用 GNU sed 来编辑它,并从每行末尾删除多余的空格(包括^M
)。