在bash脚本中读取文件时捕获文件会没用吗?
我应该“捕捉”该文件,然后将内容发送到“while”,例如:
myFileContent="$(cat "$myfile")"
while IFS='' read -r lineRead || [[ -n "$lineRead " ]]; do
<some important code here>
done <<< "$myFileContent"
或者我应该直接发送文件,例如:
while IFS='' read -r lineRead || [[ -n "$lineRead " ]]; do
<some important code here>
done < "$myfile"
答案 0 :(得分:7)
while IFS='' read -r lineRead || [[ -n "$lineRead " ]]; do
<some important code here>
done < "$myfile"
我看到两个优点
这样可以避免使用额外的代码
2.如果文件非常庞大,为什么要将其加载到内存中?
答案 1 :(得分:2)
为什么不使用简单的输入重定向:
while IFS='' read -r lineRead || [[ -n "$lineRead " ]]; do
<some important code here>
done < "$myfile"
您可以避免$(cat "$myfile")
子流程。
答案 2 :(得分:1)
取决于您正在处理的文件的大小。
如果它们很小几千字节,那么这几天真的没关系。虽然像我的大学一样,我更喜欢第二种选择,因为处理/存储浪费。 (cat是一个额外的进程,然后你必须将文件的内容存储在内存中)
如果它们是千兆字节大小的文件,那么第一种方法是不好的,在那时,while读取循环也不是一个好的选择,太慢了。那时,我会使用像sed或awk这样的流处理工具来实现整个逻辑。
答案 3 :(得分:0)
我想不出任何情况下首先将文件读入内存是有利的,但我可以想象有理由这样做。
但是,您不必使用cat
将文件读入内存:
myFileContent=$(<"$myfile")
如您所见,命令替换仅适用于重定向。