我想在C中使用类似getche()
的选项。如何从命令行中只读取一个字符输入?
我们可以使用read
命令吗?
答案 0 :(得分:37)
在bash中,read
可以执行此操作:
read -n1 ans
答案 1 :(得分:18)
read -n1
适用于bash
stty raw
模式可以防止ctrl-c工作,并且可以让你陷入输入循环而无法解决。另外,手册页说stty -raw
不能保证将终端返回到同一状态。
因此,使用stty -icanon -echo
构建dtmilano's answer可以避免这些问题。
#/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"
答案 2 :(得分:9)
在ksh你基本上可以做到:
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
答案 3 :(得分:1)
答案 4 :(得分:0)
有些人指的是“从命令行输入”,而不是从STDIN读取命令的参数,所以请不要射击我。但是我也有STDIN(也许不是最复杂的)解决方案!
使用bash并将数据包含在变量中时,可以使用参数扩展
${parameter:offset:length}
当然,您可以在给定的参数($1
,$2
,$3
等)上执行该操作
脚本
#!/usr/bin/env bash
testdata1="1234"
testdata2="abcd"
echo ${testdata1:0:1}
echo ${testdata2:0:1}
echo ${1:0:1} # argument #1 from command line
执行
$ ./test.sh foo
1
a
f
脚本
#!/usr/bin/env bash
echo please type in your message:
read message
echo 1st char: ${message:0:1}
执行
$ ./test.sh
please type in your message:
Foo
1st char: F