我需要从控制台获取一个字符而不打印它。
我尝试使用read -en 1
,就像我使用bash一样。但这根本不起作用。
并且vared
似乎没有这样的选择。
如何阅读 zsh 中的1个符号? (我使用zsh v.4.3.11 和 v.5.0.2 )
答案 0 :(得分:5)
read -sk
-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