gpt4 book ai didi

linux - 如何在 bash 中逐行读取文本文件

转载 作者:太空狗 更新时间:2023-10-29 11:07:49 28 4
gpt4 key购买 nike

为了在 bash 中逐行处理文本文件,我通常会像这样实现一个 while 循环:

function doSomething() {
local inputFile="$1"
local fd=""
local line=""
exec {fd}<"$inputFile" # open file
echo "Opened ${inputFile} for read using descriptor ${fd}"
while IFS='' read -r -u $fd line || [[ -n "$line" ]]; do
echo "read = \"$line\""
done
exec {fd}<&- # close file
return 0
}

这适用于我的 Linux,但不幸的是不适用于 OSX。对于 OSX,我目前必须将代码更改为如下所示:

exec 3<"$inputFile" # open file
while IFS='' read -r -u 3 line || [[ -n "$line" ]]; do
echo "read = \"$line\""
done
exec 3<&- # close file

但这有一个缺点,我必须自己管理文件描述符编号(在第一个脚本中,我让 bash 选择一个可用的文件描述符编号)。

有人为此提供了适用于 Linux 和 OSX 的解决方案吗?

请注意,出于某种原因,我不想像这样使用管道或 I/O 重定向到完整的循环(因为我不想在不同的进程中执行循环):

while IFS='' read -r line || [[ -n "$line" ]]; do
echo "read = \"$line\""
done < "$inputFile"

最佳答案

最后一个循环不会派生新进程。您可以通过在循环内外打印 "$BASHPID" 来验证这一点。

新进程仅为流水线创建。简单的重定向由 bash 进程中的临时 dup 处理。

请随意使用标准标准输入/标准输出重定向。它并不比使用 exec 内置的重定向更昂贵。

关于linux - 如何在 bash 中逐行读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972192/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com