映射文件 Bash Linux 命令映射文件 Bash Linux 命令映射文件 Bash Linux 命令映射文件 Bash Linux 命令
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

映射文件 Bash Linux 命令

bash shell Mapfile 命令通常称为读取数组。主要目的是读取标准输入行并将它们存储在索引数组变量中。 Mapfile 还必须从替换 (<<) 而不是管道中读取。此外,与读取循环相比,bash Mapfile 是一种更快、更方便的解决方案。如果命令执行成功则返回 1,如果不成功则返回 0。如果我们不指定数组名称,bash Mapfile 变量将默认以数组变量为目标。因此,我们决定介绍一些在 bash 上使用 mapfile 指令的示例。

touch 命令用于在 UNIX/Linux 操作系统中创建、更改和编辑文件的时间戳。因此,如图所示,我们尝试在 shell 中使用“touch”指令来创建一个新的文本文件。 GNU nano 是 Unix/Linux 操作系统的基本内置命令行编辑器。在 $符号后键入“nano”,然后键入文件名以打开或创建新文件。

$ touch new.txt
$ nano new.txt

示例 1:从文件中读取数组

shell 中的“nano”命令在“nano”编辑器中打开“new.txt”文件。我们在文本文件中分三行输入了文本 One、TWo 和 THree,如图所示。通过 Ctrl+S 保存这个简单的文本数据文件,并通过 Ctrl+X 快捷键关闭“nano”编辑器。

是时候使用mapfile指令将刚刚添加的文本数据读取到数组形式了。 new.txt 文件中的文本行使用 mapfile 命令作为数组元素存储在变量“var”中。在第二行中,echo 查询用于以数组格式打印存储在变量“var”中的数组的每个索引上的所有数据。类似地,接下来的“echo”语句代码用于显示特定索引处的数据,即分别显示数组的0、1、2、3处的数据。由于该数组仅包含 3 个值,因此索引 3 的结果不会返回任何内容。

$ mapfile Var < new.txt
$ echo ${Var[@]}
$ echo ${Var[0]}
$ echo ${Var[1]}
$ echo ${Var[2]}
$ echo ${Var[3]}

示例 2:将输出数据读入数组

我们还可以使用 mapfile 指令将 bash 指令中的一些输出语句数据用于数组。我们一直在使用 printf 语句将其输出数据放入数组“Arr”中。三个值,“Ana”、“Paul”和“George”,由换行符特殊字符“\n”分隔,将使用mapfile指令存储在其中。接下来,第一个 echo 命令用于显示数组中的所有数据。数组“Arr”的每个索引上出现的数据通过“echo”语句(后跟方括号中的索引号)类似地显示在下一行代码中。由于数组的第三个索引上没有数据,因此屏幕上不会显示任何输出。让我们继续看下一个例子。

$ mapfile Arr < <(printf “Ana \nPaul \n George\n”)
$ echo ${Var[@]}
$ echo ${Var[0]}
$ echo ${Var[1]}
$ echo ${Var[2]}
$ echo ${Var[3]}
$ echo ${Var[0]}

示例 03:映射文件 –n 选项

映射文件命令具有内置的执行选项。 -n 选项用于指定数据文件中作为数组输入的值的数量。当 n 的值为零时,所有行都应复制到数组中。下面示例中的第一行使用映射文件命令,并将 –n 选项设置为 2。这意味着它将把文件中的前两行读入名为“Var”的数组,作为数组的索引值。

echo 命令显示数组“Var”的所有索引上的数据,即 2 个索引,这意味着映射文件命令使用 –n 选项从文件中复制前两行。在mapfile指令中使用值为1的“-n”选项将仅从文件中读取一行,如下所示。

$ mapfile –n Var < new.txt
$ echo ${Var[@]}
$ mapfile –n 1 Var < new.txt
$ echo ${Var[@]}

示例 04:映射文件 –t 选项

“-t”选项用于通过将项目存储在数组中来剥离/删除换行符。下面的示例显示了命令 -t 的实际执行。替换运算符 (<) 用于将数据填充到名为“Arr. Mapfile 指令从 printf 语句接收标准输入字符串,即“Ana, ”、“Paul,”和“George,”,并将换行符 (-t) 附加到每行。当我们运行整个命令时,mapfile 会默默地扫描文本行并将每行放入其特定的数组变量中。 printf 语句的使用只是向我们表明字符串元素已被视为数组元素,而“\n”已用于在 shell 中给出换行符。

$ mapfile -T Arr< <(printf “Ana \nPaul \nGeorge\n”)
$ printf “%s\n”  “${Arr[@]}”

下面的示例展示了如何使用索引打印数组的各个项目。

$ printf “%s\n”  “${Arr[0]}”
$ printf “%s\n”  “${Arr[1]}”
$ printf “%s\n”  “${Arr[2]}”
$ printf “%s\n”  “${Arr[3]}”

在下面的示例中,echo 命令打印数组变量 MAPFILE 的所有元素,并用空格分隔。

$ printf “Ana\nPaul\nGeorge\n” | (mapfile; echo “${MAPFILE[@]}”)

我们可以使用mapfile指令的-t选项来修复它并删除换行符。

$ printf “Ana\nPaul\nGeorge\n” | (mapfile -t; echo “${MAPFILE[@]}”)

结论

本文主要是关于在 Ubuntu 20.04 系统上使用 bash mapfile 指令从某个变量中的数组中获取任何输入文本数据并根据该数据进行显示。我们尝试使用带有“-n”和“-t”选项的mapfile指令来在bash shell中获得不同格式的数组输出。

©2015-2025 艾丽卡 support@alaica.com