Bash中read命令的-i选项作用、用法及默认值不生效问题
Bash
read命令-i选项的作用与工作机制 问题场景
我原本以为执行这段代码:
read -p "Make this rsync backup session a dry run [Y/n]? " -i '--dry-run' dry_run echo "$dry_run"
直接按回车回复提示时,会输出--dry-run作为默认值,但实际输出的是换行。想搞清楚-i选项到底有什么作用,工作机制是怎样的?
官方定义
从help read的说明里能看到:
-i text use TEXT as the initial text for Readline
详细解释
核心作用
-i选项是给Bash默认的命令行编辑工具Readline设置初始显示文本,它只会把指定文本放在输入提示符后的光标位置,并不会自动把这个文本当成默认输入值。也就是说,如果你直接按回车,输入变量还是会是空值(对应输出换行);只有当你保留这个初始文本并按回车,或者修改后按回车,文本才会被赋值给变量。
工作机制
当-i配合-e选项(启用Readline处理输入)使用时,Bash会把-i指定的文本加载到输入缓冲区并显示在终端上。这时你有几种操作选择:
- 直接按回车:输入缓冲区内容被清空,变量得到空值
- 修改初始文本后按回车:变量被赋值为修改后的内容
- 不修改直接按回车:变量被赋值为
-i指定的初始文本
你的代码为何不符合预期?
-i选项的生效必须依赖-e选项——只有用-e启用Readline处理输入,-i设置的初始文本才会被加载并显示。你的代码里没加-e,所以-i的设置完全没起作用,直接按回车时变量自然是空值,输出换行。
修正后的代码如下:
read -e -p "Make this rsync backup session a dry run [Y/n]? " -i '--dry-run' dry_run echo "$dry_run"
这时直接按回车,--dry-run就会被赋值给dry_run变量,输出结果就是--dry-run。
内容的提问来源于stack exchange,提问作者Gabriel Staples
相关产品推荐
相关产品推荐

