使用 Bash 将文件读入数组
本篇文章介绍了一些使用 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 版。
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。