8

我需要从控制台中获取一个字符而不是打印它。我尝试read -en 1像使用 bash 一样使用它。但这根本行不通。而且vared似乎没有这样的选择。

如何在zsh中读取 1 个符号?(我正在使用 zsh v.4.3.11v.5.0.2

4

4 回答 4

11
read -sk

文档中:

-s

如果从终端读取,请勿回显字符。目前不适用于 -q 选项。

-k [数字]

只读取一个(或 num)个字符。所有都分配给名字,没有分词。当存在 -q 时忽略此标志。除非存在 -u 或 -p 之一,否则从终端读取输入。此选项也可以在 zle 小部件中使用。

请注意,尽管有助记键 'key',但此选项确实读取完整字符,如果设置了选项 MULTIBYTE,则可能包含多个字节。

于 2013-04-27T18:10:55.060 回答
3

如果您希望您的脚本更便携,您可以执行以下操作:

y=$(bash -c "read -n 1 c; echo \$c")
于 2014-09-02T13:12:53.660 回答
3

read默认从终端读取:

% date | read -sk1 "?Enter one char: "; echo $REPLY
Enter one char: X

上面的注释:

  • 的输出date被丢弃
  • X回显打印,而不是在用户输入时打印。

要从管道读取,请使用文件描述符 0:

% echo foobar | read -rk1 -u0; echo $REPLY
f
% echo $ZSH_VERSION
5.5.1
于 2018-06-27T08:12:22.057 回答
0

尝试类似的东西

read line
c=`echo $line | cut -c1`
echo $c
于 2013-04-27T17:45:00.267 回答