有些人可能发现在Ubuntu中,当你通过终端安装或更新时
你得到一个类似于
“是否要安装或删除包[Y/n]?”
当你按enter时,它和你输入“Y”或“Y”时一样
所以我想知道怎么在巴什做这个
这就是我目前所拥有的?
echo "question?[Y/n]"
read choose
if [ $choose ~= "Y" ] [ $choose ~= "y" ] [ $choose ~= "" ]
then
#code
fi
最佳答案
经典地(这意味着它将在POSIX-ish shell中工作,而不是bash
),您将编写:
echo "Question? [Y/n]"
read choose
if [ "$choose" = "Y" ] || [ "$choose" = "y" ] || [ -z "$choose" ]
then
# code
fi
引号确保即使
$choose
是空字符串,测试运算符也能看到参数。[[
运算符似乎允许您在不引用字符串的情况下离开,但它不是POSIX shell的一部分。POSIX通过指出:在某些实现中(当没有引用任何字符时),以下单词可能会被识别为保留字,从而导致未指定的结果:
[[ ]] function select
如果希望shell将光标留在提示所在的行上,可以使用:
printf "Question? [Y/n] "
POSIX shell识别
\c
转义;bash
不:echo "Question? [Y/n] \c"
(可能有一种方法可以让
bash
处理这个问题,但是printf
可能更便于携带。)