bash如果是空字符串

nkv*_*nkv 2 bash if-statement

当您通过终端安装或更新时,有些人可能已经发现在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)

Jon*_*ler 6

经典(意味着它将在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通过注意来识别它的存在:

在某些实现中(当没有引用任何字符时),可以将以下单词识别为保留字,从而导致未指定的结果:

[[    ]]    function    select
Run Code Online (Sandbox Code Playgroud)

如果您希望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可能更便携.)