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

如何在zsh中读取1个符号?,zsh,Zsh,我需要从控制台获得一个字符,而不是打印它。 我尝试使用read-en 1,就像使用bash一样。但这根本不起作用。 而vared似乎没有这样的选择 如何读取zsh中的1个符号?(我正在使用zshv.4.3.11和v.5.0.2)试试类似的方法 read line c=`echo $line | cut -c1` echo $c 从: - 如果从终端读取,则不要回显字符。当前无法使用-q选项 -k[num] 仅读取一个(或num)字符。所有名称都指定给第一个名称,不进行分词。当存在-q时,将忽略

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

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

试试类似的方法

read line
c=`echo $line | cut -c1`
echo $c
从:

-

如果从终端读取,则不要回显字符。当前无法使用-q选项

-k[num]

仅读取一个(或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
    由echo打印,而不是在用户输入时打印

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

% echo foobar | read -rk1 -u0; echo $REPLY
f
% echo $ZSH_VERSION
5.5.1

那对我不起作用。用户必须输入一个符号(或行),然后点击“回车”。我需要得到这个确切的符号,然后继续前进。而且,最重要的是,这个符号不需要打印。这很有帮助。我有一个shebang的
/bin/bash
,但是我在zsh中运行脚本,它似乎覆盖了解释器,只用于
读取
。这里有一个小小的添加
choice=$(bash-c“read-p”你确定吗?(y/n)'-n1c;echo\$c)
% echo foobar | read -rk1 -u0; echo $REPLY
f
% echo $ZSH_VERSION
5.5.1