יוני ארליך
יוני ארליך

Reputation: 87

bash test with double brackets doesn't validate regex correctly

I'm new to the bash scripting world, and during learning I wrote a simple password validator script:

#! /bin/bash

args=("$@")
PASSWORD=${args[1]}
if [[ "$PASSWORD" =~ [0-9A-Za-z] ]]
then
    echo "PASSWORD LEGIT"
else
    echo "WRONG PASSWORD"
    fi

With the argument PassWord12, it should output PASSWORD LEGIT, yet it doesn't. I'm using double brackets instead of 'test' syntax. What am I doing wrong? Thank you.

Upvotes: 1

Views: 67

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626926

If you run declare -p args, you will get declare -a args=([0]="PassWord12") which clearly indicates the value you passed has the 0th index in the array. Positional parameters start at 1, but array indices start at 0.

You may use

args=("$@")
PASSWORD="${args[0]}"
if [[ "$PASSWORD" =~ [0-9A-Za-z] ]]
then
    echo "PASSWORD LEGIT"
else
    echo "WRONG PASSWORD"
fi

If you echo the $PASSWORD, you will see you will see the value passed to the script.

Note that you probably want to use [[:alnum:]] instead of a [0-9A-Za-z].

Upvotes: 1

Related Questions