如何在zsh中读取1个符号?

时间:2013-04-27 17:27:19

标签: zsh

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

如何阅读 zsh 中的1个符号? (我使用zsh v.4.3.11 v.5.0.2

4 个答案:

答案 0 :(得分:5)

read -sk

来自documentation

  

-s

     

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

     

-k [num]

     

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

     

请注意,尽管助记符为“key”,但此选项会读取完整字符,如果设置了MULTIBYTE选项,则可能包含多个字节。

答案 1 :(得分:1)

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

y=$(bash -c "read -n 1 c; echo \$c")

答案 2 :(得分:1)

% date | read -sk1 "?Enter one char: "; echo $REPLY Enter one char: X 默认从终端读取:

date

上述注意事项:

  • X的输出被丢弃
  • % echo foobar | read -rk1 -u0; echo $REPLY f % echo $ZSH_VERSION 5.5.1 是通过回显打印的,而不是在用户输入时打印的。

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

{{1}}

答案 3 :(得分:0)

尝试类似

的内容
read line
c=`echo $line | cut -c1`
echo $c