Linux read 命令最全详解|Shell 交互输入从入门到精通实战教程 1. 命令简介read 是 Linux/Unix shell 环境中的一个内置命令主要用于从标准输入通常是键盘读取数据并将读取的值赋给指定的变量。该命令在 shell 脚本中广泛用于实现与用户的交互例如提示用户输入信息、读取配置文件或处理管道传递的数据。2. 语法格式bash运行read [选项] [变量名...]基本行为当不指定任何变量名时读取的整行内容会被存储在内置变量 REPLY 中。 当指定一个或多个变量名时输入行会按 IFSInternal Field Separator默认为空格、制表符、换行符进行分词并依次赋值给对应的变量。多余的输入内容会全部赋给最后一个变量。3. 常用选项及说明表格选项说明-p “提示文本”在等待输入前打印指定的提示文本无需额外使用 echo。-t 超时秒数设置等待用户输入的超时时间秒。若超时命令将返回非零状态变量可能为空或保持原值。-s静默模式。输入的内容如密码不会回显在终端上。-n 字符数仅读取指定数量的字符一旦达到此数立即返回无需等待用户按下回车。-r原始读取。禁用反斜杠 \ 的转义功能行末的反斜杠将不作为续行符处理。-a 数组名将读取到的词依次赋值给指定数组从索引 0 开始。-d 分隔符使用指定的字符作为输入行的结束符而不是默认的换行符。-e仅适用于交互式 shell使用 Readline 库进行行编辑提供历史命令、快捷键等增强功能。-i 初始文本与 -e 结合使用在编辑缓冲区中预置初始文本。4. 示例用法示例 1基本读取bash运行#!/bin/bash echo -n 请输入您的名字: read name echo 你好, $name!示例 2使用 -p 选项提示bash运行read -p 请输入您的用户名: username echo 用户名已记录: $username示例 3读取多个变量bash运行read -p 请输入姓和名用空格分隔: first last echo 姓: $first 名: $last示例 4使用 -s 选项读取密码bash运行read -s -p 请输入密码: password echo # 为了换行 echo 密码已接收不显示。示例 5设置超时 -tbash运行if read -t 5 -p 请在5秒内输入Y或N: answer; then echo 您输入了: $answer else echo 时间到未输入。 fi示例 6限制输入字符数 -nbash运行read -n 1 -p 请按一个键 (Y/N): key echo # 为了换行 echo 您按了: $key示例 7读取到数组 -abash运行read -a fruits -p 请输入几种水果用空格分隔: echo 第一个水果是: ${fruits[0]} echo 所有水果是: ${fruits[]}示例 8使用自定义分隔符 -dbash运行read -d : -p 请输入以冒号结尾的信息: text echo 读取到的信息是: $text示例 9原始模式 -r 读取路径bash运行read -r -p 请输入一个可能包含反斜杠的路径: path echo 路径是: $path # 不使用 -r 时输入 C:\Users 会被转义。示例 10读取管道或文件输入bash运行echo 一行数据 | read line echo $line # 循环读取文件推荐写法避免子shell问题 while read line; do echo $line done test.txt5. 注意事项变量作用域在管道 | 中使用的 read 命令通常会在子 shell 中执行其赋值的变量在父 shell 中不可见。使用 while read ...; do ...; done file 或进程替换可以避免此问题。IFS 的影响read 命令使用 IFS 变量来分割输入行。修改 IFS 可以改变读取行为例如IFS: 会按冒号分割。反斜杠转义默认情况下反斜杠 \ 是转义字符允许续行。使用 -r 选项可以禁用此行为。超时处理使用 -t 选项时如果超时read 命令会返回一个非零的退出状态码可用于条件判断。文件结束EOF如果输入流提前结束例如读取文件到最后read 会返回非零状态这在循环读取文件时非常有用。空格处理行首和行尾的空白由 IFS 定义默认会被去除。如果需要保留可以临时修改 IFS 为空。Bash 增强-e 和 -i 选项是 Bash 的增强功能在其他 shell如 dash中可能不可用。编写可移植脚本时需注意。