IF语句在没有真实陈述的情况下触发

时间:2017-10-13 09:47:37

标签: bash

以下while循环旨在不断询问用户输入,直到输入指定的“break”字符。但是,出于某种原因,无论输入什么文本,都会触发此IF语句。

 while true; do
    #Prompt user for Input
    printf "Please insert value. Insert the letter 'D' when you are done\n";
    #Read User Input
    read User_Input;
    echo "DEBUG: Input is: $User_Input";
    #Check User Input for Break Command
        if [ "$User_Input"=="D" ]; then
            break
        fi

done

在脚本中,我将用户输入变量声明为User_Input="";

据我所知,if语句是正确的,并且脚本在运行时没有抛出任何错误。

2 个答案:

答案 0 :(得分:3)

if [ "$User_Input"=="D" ]; then

DEBUG: Input is: a
+ '[' a==D ']'
+ break

应该写成

if [ "$User_Input" == "D" ]; then

DEBUG: Input is: e
+ '[' e == D ']'
+ true
+ printf 'Please insert value. Insert the letter '\''D'\'' when you are done\n'
Please insert value. Insert the letter 'D' when you are done
+ read User_Input
D
+ echo 'DEBUG: Input is: D'
DEBUG: Input is: D
+ '[' D == D ']'
+ break

==

之前和之后需要空格

答案 1 :(得分:2)

if [ "$User_Input"=="D" ]; then

# space
if [ "$User_Input" == "D" ]; then

因为它调用[带4个参数的命令。

  

正如bash builtins的手册页所述:“每个运算符和操作数   必须是一个单独的论点。“