在Java中,如果您确定文件非常小,则可以使用readBytes()
方法一次性读取内容,而不是逐行读取或使用缓冲区。
只是想知道shell脚本,我知道我们可以做类似的事情:
while read line
do
echo $line
LINE = $line
done < "test.file"
echo $LINE
如果我的test.file是这样的:
testline1
testline2
testline3
这只给了我$LINE
的最后一行。 $LINE
包含“testline3”。
我的问题是:如何将包含多行的整个文件读入一个变量,这样我才能得到$LINE="testline1\ntestline2\ntestline3"
?
答案 0 :(得分:77)
处理循环内部的行而不是之后的行。如果你真的需要变量中的文件:
var=$(<file)
答案 1 :(得分:11)
另一种选择是使用内置的漂亮mapfile:
mapfile < test.file
echo "${MAPFILE[@]}"
答案 2 :(得分:8)
作为另一种选择,您可以构建一个行数组。如果您正在运行bash 4+,则可以使用mapfile
内置:
mapfile -t lines <test.file
如果您希望输出和存储行,您可以执行以下操作:
mapfile -t lines < <(tee /dev/tty <test.file)
然后"${lines[0]}"
将成为文件的第一行,"${lines[1]}"
将成为第二行,依此类推。 ${#lines[@]}
将是行数; "${lines[@]}"
将是整个数组,而"${lines[*]}"
将是将空格连接在一起形成一个大字符串的行。
对于旧版本的bash,您可以手动构建阵列:
lines=()
while IFS= read -r line
do
printf '%s\n' "$line"
lines+=("$line")
done < test.file