使用bash脚本时,“cat”文件是一个无用的步骤吗?

时间:2016-03-23 13:01:30

标签: bash file

在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"

4 个答案:

答案 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")

如您所见,命令替换仅适用于重定向。