我要像在C getche()
类似的选项我如何读取距离命令行的单个字符的输入?
使用read
命令可以做什么呢?
在KSH你可以基本上做到:
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
在bash,read
可以做到这一点:
read -n1 ans
read -n1
工程庆典
该stty raw
模式防止CTRL-C从工作,可以让你在没有出路的输入回路卡住。另外,手册页说stty -raw
不能保证你的终端设备恢复到相同的状态。
因此,使用dtmilano's answer上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"
有些人的意思与“命令行输入”给从标准输入,而不是阅读...命令的参数,所以请不要拍我。但我有一个STDIN(也许不是最先进的)解决方案,太!
当在可变使用bash和具有该数据,可以使用参数扩展
${parameter:offset:length}
当然,你可以在给定的ARGS($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