如何读取shell脚本只是一个单一的字符

问题描述 投票:18回答:5

我要像在C getche()类似的选项我如何读取距离命令行的单个字符的输入?

使用read命令可以做什么呢?

linux shell io ksh
5个回答
10
投票

在KSH你可以基本上做到:

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

38
投票

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

read -n1 ans

18
投票

read -n1工程庆典

stty raw模式防止CTRL-C从工作,可以让你在没有出路的输入回路卡住。另外,手册页说stty -raw不能保证你的终端设备恢复到相同的状态。

因此,使用dtmilano's answerstty -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"

3
投票
read -n1

读取输入的一个字符

echo "$REPLY"

打印屏幕上的结果

DOC:https://www.computerhope.com/unix/bash/read.htm


0
投票

有些人的意思与“命令行输入”给从标准输入,而不是阅读...命令的参数,所以请不要拍我。但我有一个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

reading from STDIN

脚本

#!/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
© www.soinside.com 2019 - 2024. All rights reserved.