当您通过终端安装或更新时,有些人可能已经发现在Ubuntu中
你得到一个类似的问题
"你有没有安装或删除包[Y/n]?"
当你按下输入时就像输入"Y"或"y"时一样
所以我想知道如何在bash中实现这一点这是我到目前为止所拥有的?
echo "question?[Y/n]"
read choose
if [ $choose ~= "Y" ] [ $choose ~= "y" ] [ $choose ~= "" ]
then
#code
fi
Run Code Online (Sandbox Code Playgroud)
经典(意味着它将在POSIX-ish shell之外工作bash
),你会写:
echo "Question? [Y/n]"
read choose
if [ "$choose" = "Y" ] || [ "$choose" = "y" ] || [ -z "$choose" ]
then
# code
fi
Run Code Online (Sandbox Code Playgroud)
引号确保测试操作符即使$choose
是空字符串也能看到参数.
该[[
操作似乎让你脱身无报价字符串,但不是POSIX外壳的一部分.POSIX通过注意来识别它的存在:
在某些实现中(当没有引用任何字符时),可以将以下单词识别为保留字,从而导致未指定的结果:
Run Code Online (Sandbox Code Playgroud)[[ ]] function select
如果您希望shell将光标留在与提示相同的行上,您可以使用:
printf "Question? [Y/n] "
Run Code Online (Sandbox Code Playgroud)
POSIX shell识别\c
逃逸; bash
才不是:
echo "Question? [Y/n] \c"
Run Code Online (Sandbox Code Playgroud)
(可能有办法bash
处理,但printf
可能更便携.)