为什么我的大写检查总是导致true,即使不应该呢?

时间:2018-12-23 22:11:49

标签: linux bash

我正在编写脚本以检查密码是否具有大写字母,但始终显示出它具有大写字母。

我尝试使用

if [[ $password =~ [A-Z] ]]; then
echo "Contains Upper Case"

但是它总是打印出来。

这是我的脚本:

read -p "Enter Password: " password
if [ ${#password} -lt 8 ]; then 
echo "TOO SHORT , MAN! " 
fi
if [[ $password =~ [A-Z] ]]; then
echo "Contains Upper Case"
fi

1 个答案:

答案 0 :(得分:1)

请勿使用[A-Z]它仅在某些语言设置/语言环境中有效(排序看起来像ABCD...Zabcd...z,像AaBb...Zz一样)

为使代码在任何地方都能正常工作,请改用[[:upper:]]

#!/usr/bin/env bash
[ -n "$BASH_VERSION" ] || { echo "ERROR: Shell is not bash" >&2; exit 1; }

if [[ $password =~ [[:upper:]] ]]; then
  echo "Contains at least one upper-case character"
else
  echo "Does not contain one or more upper-case characters"
fi