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