How to regex compare a string in dash?
-
28-06-2021 - |
Question
I'm moving a bash script to dash for compatibility reasons. Is there a POSIX/Dash alternative to the following comparison?
COMPARE_TO="^(lp:~?|https?://|svn://|svn\+ssh://|bzr://|bzr\+ssh://|git://|ssh://)"
if [[ $COMPARE =~ $COMPARE_TO ]]; then
echo "WE ARE COMPARED!"
fi
Solution
You can use a case. It doesn't use regex, but it's not that much longer with globs
case $compare in
lp:*|http://*|https://*|svn://*|svn+ssh://*|bzr://*|bzr+ssh://*|git:/*|ssh://*)
echo "We are compared"
;;
esac
On a side note, you should avoid using all uppercase variable names as you risk overwriting special shell variables or environment variables.
OTHER TIPS
dash doesn't have regex comparing built in, but you can always use grep:
if echo "$compare" | egrep -q "$compare_to"; then
...
(Note that I second @geirha's note about uppercase variables in the shell.)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow