bash测试中的OR逻辑运算符



测试似乎无法正常工作。为什么?我需要一个脚本,它接受第一个参数,检查它是哪个字母并完成工作。如果字母是a,b,c或d,它就会退出,否则会正确。

letter=$1                                                                                                                                             

[[ $letter != a || $letter != b || $letter != c || $letter != d ]] && echo exiting && exit 1                                                          

if [[ $letter == a ]]                                                                                                                                 
then                                                                                                                                                  
echo correct                                                                                                                                      
fi

让我们举一个更简单的例子:[[ $letter != a || $letter != b ]] 不管letter是什么,这两个测试中的一个都是真的。如果选择a,则$letter != b .如果选择b,则$letter != a 。如果你选择任何其他字符,两者都是正确的。

您需要&&

[[ $letter != a && $letter != b && $letter != c && $letter !=d ]] && { echo exiting; exit 1; }.

或使用=/==并在测试使用||

[[ $letter = a || $letter = b || $letter = c || $letter = d ]] || { echo exiting; exit 1; }

(在这两种情况下,首选显式if语句,而不是使用 &&||

if [[ $letter != a && $letter != b ... ]]; then
    echo exiting >&2  # use standard error, not standard output
    exit 1
fi
if ! [[ $letter = a || $letter = b ... ]]; then
     echo exiting >&2  # use standard error, not standard output
     exit 1
fi

(

不过,更简单的是使用 case 语句:

case $letter in
    a|b|c|d) : ;;  # do nothing
    *) echo exiting
       exit 1
       ;;
esac

相关内容

  • 没有找到相关文章

最新更新