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