mapfile
从标准输入读取行并赋值到数组。
概要
1mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
主要用途
- 从标准输入或文件描述符读取行并赋值到数组。
选项
1-d delim 将delim设为行分隔符,代替默认的换行符。
2-n count 从标准输入中获取最多count行,如果count为零那么获取全部。
3-O origin 从数组下标为origin的位置开始赋值,默认的下标为0。
4-s count 跳过对前count行的读取。
5-t 读取时移除行分隔符delim(默认为换行符)。
6-u fd 从文件描述符fd中读取。
7-C callback 每当读取了quantum行时,调用callback语句。
8-c quantum 设定读取的行数为quantum。
9
10如果使用-C时没有同时使用-c指定quantum的值,那么quantum默认为5000。
11当callback语句执行时,将数组下一个要赋值的下标以及读取的行作为额外的参数传递给callback语句。
12如果使用-O时没有提供起始位置,那么mapfile会在实际赋值之前清空该数组。
参数
array(可选):用于输出的数组名称。如果没有指定数组名称,那么会默认写入到变量名为MAPFILE的数组中。
返回值
返回成功除非使用了非法选项、指定的数组是只读的、指定的数组不是下标数组。
例子
1# 常见的读取形式。
2mapfile < source_file target_array
3cat source_file |mapfile target_array
4mapfile -u fd target_array
5
6# 只读取前5行。
7mapfile < source_file -n 5 target_array
8
9# 跳过前5行。
10mapfile < source_file -s 5 target_array
11
12# 在数组指定的下标开始赋值。
13# 请注意:这样做不会清空该数组。
14mapfile < source_file -O 2 target_array
15
16# 读取时设定行分隔符为tab。
17# 注意,第二行的tab在终端需要用ctrl+v tab输入;
18mapfile < source_file -d $'\t' target_array
19mapfile < source_file -d ' ' target_array
20
21# 读取时移除行分隔符(tab)。
22mapfile < source_file -d $'\t' -t target_array
23# 读取时移除行分隔符(换行符)。
24mapfile < source_file -t target_array
25
26# 每读取2行,执行一次语句(在这里是echo)。
27mapfile < source_file -C "echo CALLBACK:" -c 2 target_array
28
29# 遍历下标,依次显示数组的元素。
30for i in ${!target_array[@]}; do
31 printf "%s" ${target_array[i]}
32done
注意
- 该命令是bash内建命令,相关的帮助信息请查看
help
命令。 - bash内建命令readarray是mapfile的同义词。
来源:https://github.com/jaywcjlove/linux-command
最后修改于: Wednesday, January 31, 2024
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。