如何在shell脚本中只读一个字符

我想要类似的选项,如c中的getche() 。 我怎样才能从命令行读取一个字符input。

使用read命令我们可以做到吗?

Solutions Collecting From Web of "如何在shell脚本中只读一个字符"

在ksh中你基本上可以这样做:

 stty raw REPLY=$(dd bs=1 count=1 2> /dev/null) stty -raw 

在bash中, read可以做到这一点:

 read -n1 ans 

read -n1适用于bash

stty raw模式阻止ctrl-c的工作,并可以让你卡在一个没有出路的输入循环。 另外手册页上说stty -raw不能保证你的终端返回到相同的状态。

所以,建立在dtmilano的答案使用stty -icanon -echo避免了这些问题。

 #/bin/ksh ## /bin/{ksh,sh,zsh,...} # read_char var read_char() { stty -icanon -echo eval "$1=\$(dd bs=1 count=1 2>/dev/null)" stty icanon echo } read_char char echo "got $char"