Skip to content
Advertisement

Bug while checking for symbols inside of a string?

I’m creating a small calculator script and I’ve got stumbled on a strange bug. Everything seems to work but not when I input anything starting with (. When I do that if gives false and the code inside of else executes. I’ve tried a lot of ways rewriting how should "$input" =~ [-,+,*,/,(,)] look like but nothing worked. Do you have any idea why that’s happening and how to solve this bug?

#!/bin/bash
read -p "Input: " input
if [[ ! "$input" =~ ^[A-Za-z_]+$ && "$input" =~ ^[0-9] && "$input" =~ [-,+,*,/,(,)] ]]; then
 (echo $input = $(($input))) 2>- || echo "Please, do not input ..."
else
 echo "Please, do not input letters or other special symbols and type in only expressions."
fi

Advertisement

Answer

If you need to make sure your input consists of just certain characters, use this much simpler regex:

#!/bin/bash

read -r -p "Input: " input

if [[ $input =~ ^[0-9+*/()-]*$ ]]; then
   (echo "$input = $((input))") 2> /dev/null || echo "Please, do not input ..."
else
   echo "Please, do not input letters or other special symbols and type in only expressions."
fi
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement