如何正则表达式比较破折号中的字符串?

时间:2012-08-28 18:21:21

标签: regex bash dash-shell

出于兼容性原因,我正在移动一个bash脚本。是否有POSIX / Dash替代以下比较?

COMPARE_TO="^(lp:~?|https?://|svn://|svn\+ssh://|bzr://|bzr\+ssh://|git://|ssh://)"

if [[ $COMPARE =~ $COMPARE_TO ]]; then
    echo "WE ARE COMPARED!"
fi

2 个答案:

答案 0 :(得分:8)

您可以使用案例。它不使用正则表达式,但使用globs

的时间并不长
case $compare in
    lp:*|http://*|https://*|svn://*|svn+ssh://*|bzr://*|bzr+ssh://*|git:/*|ssh://*)
        echo "We are compared"
    ;;
esac

另外,您应avoid using all uppercase variable names,因为您有可能覆盖特殊的shell变量或环境变量。

答案 1 :(得分:4)

dash没有内置的正则表达式比较,但你总是可以使用grep:

if echo "$compare" | egrep -q "$compare_to"; then
    ...

(请注意,我在@ geirha关于shell中的大写变量的第二个注释。)