有些人可能发现在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可能更便于携带。)

10-08 19:39