迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

使用 Bash 将文件读入数组

作者:迹忆客 最近更新:2023/05/30 浏览次数:

本篇文章介绍了一些使用 Bash 从文件中读取行并将其加载到数组中的方法。

首先,我们将看到 readarray 方法。 之后,我们将研究一种更通用的将文件读入 Bash 数组的方法。


使用 readarray 方法使用 Bash 将文件读入数组

readarray 是 Bash 4.0 附带的函数。 此方法适用于所有高于 4.0 的 Bash 版本。

如果您想查看当前运行的 Bash 版本,可以使用以下命令:

echo ${Bash_VERSION}

如果你的 Bash 版本低于 4.0,你可以跳到下一个方法,因为 readarray 对你不起作用。

我们将为所有示例使用一个名为 numbers.txt 的文件,其中包含以下内容。

numbers.txt 文件:

1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1

读取此文件并将其内容保存到数组中的语法如下:

readarray -t Arr < numbers.txt

分解语法,我们有 readarray 作为命令的名称,-t 将删除换行符,Arr 是写入文件内容的数组的名称。 numbers.txt 是我们要读取的文件的名称。

请注意 ,如果要读取的文件与您的脚本不在同一文件夹中,则应提供该文件的完整路径。

可以读取此数组的内容,如以下示例所示:

echo ${Arr[1]}

上面的代码将输出数组索引 1 中的行,这是文件的第二行。

输出是:

2 1

要打印出整个数组,请使用以下语法:

echo ${Arr[@]}

此输出将是:

1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1

使用 Bash 使用通用方法将文件读入数组

一般方法的语法如下:

IFS=$'\r\n' GLOBIGNORE='*' command eval  'ArrName=($(cat filename))'

读取此数组将具有与上一个示例中所示类似的语法:

echo ${ArrName[1]}

上面的 Bash 行将显示数组索引 1 中的内容。 但是,如果我们想显示整个数组的内容,我们可以使用:

echo ${ArrName[@]}

一般方法说明

一般语法中的 ArrName 是数组名,而 cat 后面的文件名是要读取的文件名。 我们将修改这两个变量以供我们自定义使用。

IFS 定义中断字符,在本例中为 \r\n\r 是回车符,\n 是换行符。

在大多数现代系统中,您会看到 \n 被用作换行符。

GLOBIGNORE='*' 被设置为安全以避免文件名出现奇怪的边缘情况。 应该注意的是,由于使用了 GLOBIGNORE,此命令需要 Bash(并且可能不一定适用于其他 shell,例如 zsh 或 fish)。

另一个需要注意的要点是这个解决方案比 readarray 慢得多。 使用它的唯一原因是你的 Bash 版本早于 4.0 版。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便