仅read -r
由POSIX 指定;read -n NUM
,用于读取NUM
字符,不是。从标准输入读取给定数量的字符后,是否有一种可移植的方式自动返回?
我的用例正在打印这样的提示:
Do the thing? [y/n]
如果可能的话,我想让程序在输入y
or后自动继续n
,而不需要用户在之后按 enter。
仅read -r
由POSIX 指定;read -n NUM
,用于读取NUM
字符,不是。从标准输入读取给定数量的字符后,是否有一种可移植的方式自动返回?
我的用例正在打印这样的提示:
Do the thing? [y/n]
如果可能的话,我想让程序在输入y
or后自动继续n
,而不需要用户在之后按 enter。
读取一个字符意味着一次读取一个字节,直到你得到一个完整的字符。
要使用 POSIX 工具箱读取一个字节,有
dd bs=1 count=1
.但是请注意,从终端设备读取时,当该设备处于
icanon
模式时(通常默认情况下),只有在您按下Return(aka Enter) 时才会返回,因为在此之前终端设备驱动程序实现了一种行编辑器形式,允许您使用Backspace或其他编辑字符来修改您输入的内容,并且您输入的内容只有在您提交您一直在编辑的那一行时才可用于阅读应用程序(使用Return或Ctrl+ D)。出于这个原因,
ksh
'sread -n/N
或zsh
'sread -k
,当他们检测到 stdin 是终端设备时,将该设备置于icanon
模式之外,以便在终端发送字节后立即可以读取它们。现在请注意
ksh
'read -n n
只读取一行中的n
字符,当读取换行符时它仍然停止(用于读取字符)。,与 ksh93 相反,仍然对 和 进行 IFS 和反斜杠处理。-N n
n
bash
-n
-N
要模仿
zsh
'sread -k
或ksh93
'sread -N1
或bash
'sIFS= read -rN 1
,即从标准输入中读取一个且仅一个字符,POSIXly:引用这个答案......这对我来说适用于bash:
dd的其他解决方案: