regexbashdash-shell

How to regex compare a string in dash?


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.