我需要从控制台中获取一个字符而不是打印它。我尝试read -en 1
像使用 bash 一样使用它。但这根本行不通。而且vared
似乎没有这样的选择。
如何在zsh中读取 1 个符号?(我正在使用 zsh v.4.3.11和v.5.0.2)
我需要从控制台中获取一个字符而不是打印它。我尝试read -en 1
像使用 bash 一样使用它。但这根本行不通。而且vared
似乎没有这样的选择。
如何在zsh中读取 1 个符号?(我正在使用 zsh v.4.3.11和v.5.0.2)
read -sk
从文档中:
-s
如果从终端读取,请勿回显字符。目前不适用于 -q 选项。
-k [数字]
只读取一个(或 num)个字符。所有都分配给名字,没有分词。当存在 -q 时忽略此标志。除非存在 -u 或 -p 之一,否则从终端读取输入。此选项也可以在 zle 小部件中使用。
请注意,尽管有助记键 'key',但此选项确实读取完整字符,如果设置了选项 MULTIBYTE,则可能包含多个字节。
如果您希望您的脚本更便携,您可以执行以下操作:
y=$(bash -c "read -n 1 c; echo \$c")
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
尝试类似的东西
read line
c=`echo $line | cut -c1`
echo $c