繁体   English   中英

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

[英]How to read just a single character in shell script

我想要像 C 中的getche()类似的选项。如何从命令行读取单个字符输入?

使用read命令可以吗?

在 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"

在 ksh 中,您基本上可以执行以下操作:

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

从输入中读取一个字符

echo "$REPLY"

在屏幕上打印结果

文档: https : //www.computerhope.com/unix/bash/read.htm

有些人的意思是“从命令行输入”是一个给命令的参数,而不是从标准输入读取……所以请不要射击我。 但是我也有一个(可能不是最复杂的)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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM