这是使用选项时的预期行为
-q
. 以下是
ZSH manual
:
read [ -rszpqAclneE ] [ -t [ num ] ] [ -k [ num ] ] [ -d delim ]
[ -u n ] [ name[?prompt] ] [ name ... ]
[…]
- q
只从终端读取一个字符并设置
名称
到
y
如果这个角色是
Y
或
Y
并且
n
否则。设置此标志时,仅当字符为
Y
或
Y
. 此选项可与超时一起使用(请参见
-t
);如果读取超时或遇到文件结尾,则返回状态2。输入从终端读取,除非
-u
或
-p
存在。此选项也可以在zle小部件中使用。
如果你想有相反的行为,即只有当你输入n或n时才假设一个否定的答案,否则只假设一个肯定的答案,你可以使用这个选项。
-k 1
:
function readtest {
local YorN
read -q "YorN?Go ahead? [Y/n]"
if [[ ${(U)YorN} == "N" ]] ; then
echo "Don't do the thing!"
else
echo "Go ahead!"
fi
}
另一种选择是颠倒问题:
read -q "YorN? Stop here? [y/N]"