Linux read 命令 - 读取输入数据并赋值给变量
• 最后修改:2025-07-18 • 阅读量:61
本文全面解析 Linux / Unix / FreeBSD 系统中的 read
命令(英文全称:read from standard input),提供跨平台使用指南和深度脚本交互技巧,涵盖超时控制、隐藏输入、多变量解析等核心应用场景。
read 命令释义
read ( read from standard input ) 是 Shell 内置命令,用于 从标准输入读取数据并赋值给变量。其主要功能包括:
- 📥 交互式输入:在脚本中获取用户输入
- ⏱️ 超时控制:设置输入等待时间限制
- 🔒 安全输入:支持密码等敏感信息的隐藏输入
- 📚 数据解析:按分隔符拆分输入到多个变量
- 🔢 字符控制:精确限制读取字符数量
读取原理:
- 从标准输入(键盘)或文件描述符读取数据
- 按
IFS
(Internal Field Separator)分割输入 - 将分割后的字段分配给指定变量
- 剩余内容存储到最后一个变量
read 系统兼容性
read
是 Shell (Bash / Zsh / Ksh) 内置命令,所有主流系统均原生支持:
- Linux 发行版:Debian / Ubuntu / RHEL / AlmaLinux / Rocky Linux / Arch Linux
- Unix-like 系统:FreeBSD / OpenBSD / macOS
- 无需安装:直接使用 Shell 内置命令
read 命令语法
read [-options] [variable_name(s)]
-options
:控制读取行为的选项(详见下方选项说明)variable_name(s)
:存储读取结果的变量名(多个变量时按分隔符自动拆分)
返回值说明:
- 成功读取:返回状态码 0
- 超时/EOF:返回非零状态码
- 无变量指定时:内容存储在
REPLY
系统变量中
特殊变量:
变量 | 说明 |
---|---|
REPLY |
未指定变量时的默认存储位置 |
IFS |
输入字段分隔符(默认:空格/制表符/换行) |
$? |
读取操作的状态返回值 |
read 命令示例
1:基本读取
echo "请输入用户名:"
read username
▸ 等待用户输入并存储到 username
变量
2:超时控制
read -t 10 -p "10秒内输入验证码:" code
▸ -t 10
:设置10秒超时
▸ -p
:显示提示文本
3:隐藏输入密码
read -s -p "输入密码:" password
echo # 换行修复光标位置
▸ -s
:隐藏输入内容
▸ 输入时不会显示字符
4:多变量读取
read -r first_name last_name <<< "John Doe"
▸ -r
:禁用反斜杠转义
▸ 自动拆分空格分隔的输入
5:限制字符数量
read -n 5 -p "输入5字符ID:" user_id
▸ -n 5
:读取5个字符后自动结束
6:自定义分隔符
IFS="," read city country <<< "Paris,France"
echo "城市:$city, 国家:$country"
▸ 设置 ,
为分隔符
▸ 解析 CSV 格式数据
7:读取到数组
read -a colors -p "输入喜欢的颜色(空格分隔):"
echo "第一个颜色:${colors[0]}"
▸ -a
:将输入存储为数组
▸ 支持索引访问
read 命令选项详解
如下给出 read 命令选项的详细解释说明:
选项 | 说明 | 兼容性 |
---|---|---|
-a array |
读取为数组 | Bash / Zsh / Ksh |
-d delim |
设置结束分隔符(代替换行符) | 所有 Shell |
-e |
使用 Readline 库(支持行编辑) | Bash |
-i text |
提供默认输入文本 | Bash |
-n nchars |
读取指定字符数后返回 | 所有 Shell |
-N nchars |
精确读取 n 字符(忽略分隔符) | Bash |
-p prompt |
显示提示文本 | 所有 Shell |
-r |
禁用反斜杠转义(推荐始终使用) | 所有 Shell |
-s |
静默模式(隐藏输入) | 所有 Shell |
-t timeout |
设置超时秒数(支持小数) | 所有 Shell |
-u fd |
从文件描述符读取 | 所有 Shell |
特殊注意事项:
-r
选项应始终在脚本中使用,避免\
转义问题-t
超时后变量可能包含部分输入内容-N
会精确读取指定字节数(包括换行符)- FreeBSD 的
sh
不支持-e/-i
等高级选项 - 多个选项可组合:
read -rst 5 -p "密码:"
结语
read
是 Shell 脚本交互的核心工具,关键要点:
- 安全输入:
- 密码处理必用
-s
选项 - 外部数据解析使用
-r
防转义
- 密码处理必用
- 健壮性设计:
- 重要操作添加
-t
超时控制 - 检查
$?
状态码处理异常输入
- 重要操作添加
- 数据解析:
- 使用
IFS
自定义分隔符处理结构化数据 - 数组读取 (
-a
) 简化多值处理
- 使用
- 跨平台兼容:
bash # FreeBSD sh 兼容写法 printf "输入: " >&2; read -r var
最佳实践:
# 安全读取模板
read -r -t 15 -p "输入内容:" var_name || {
echo "输入超时!" >&2
exit 1
}
通过合理运用 read
命令,可创建交互性强、安全可靠的 Shell 脚本,显著提升用户体验和脚本健壮性!