1993

10 分钟

#Bash 的 readarray 命令

readarray [OPTION]... [ARRAY]

功能

按行读取输入并写入数组中。

类型

Bash 内置命令。

参数

  • OPTION 选项:
    • -d delim - 使用 delim 作为行的分隔符;默认为换行符(\n
    • -n count - 最多读取 count 行;如果 count 是 0 则读取全部行
    • -O origin - 从数组 ARRAY 的第 origin 个元素开始赋值;默认从 0 开始
    • -s count - 丢弃开头的 count
    • -t - 丢弃行末的分隔符
    • -u fd - 从文件描述符 fd 读取;默认为标准输入
    • -C callback - 每读取 quantum 行调用一次 callback
    • -c quantum - 每读取 quantum 行调用一次 callback
  • ARRAY - 要写入的数组变量名;省略此参数则默认写入变量 MAPFILE

#示例

基础使用

$ readarray arr < <(echo -e "1\n2\n3")          # 将 "1\n2\n3" 读入数组 arr 
$ echo -e "${arr[0]}"                           # 内容包含末尾的换行符
1

$ echo -e "${arr[1]}"
2

$ echo -e "${arr[2]}"
3

去除分隔符

$ readarray -t arr < <(echo -e "1\n2\n3")       # 将 "1\n2\n3" 读入数组 arr 
$ echo -e "${arr[0]}"                           # 换行符被移除
1
$ echo -e "${arr[1]}"
2
$ echo -e "${arr[2]}"
3

指定索引

$ readarray -t -s 2 -O 3 arr < <(echo -e "a\nb\nc\nd")  # 丢弃前 2 行,之后读取的内容写入 arr[3] 及之后的元素
$ echo -e "${arr[@]}"
1 2 3 c d

#相关命令

命令说明
mapfile按行读取输入并写入数组中
read读取一行输入并将其拆分进多个字段

#手册

更新: 2026/4/21

作者: PlanC

创建: 2026/4/21