4

出于兼容性原因,我正在移动一个 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
4

2 回答 2

10

你可以用一个案例。它不使用正则表达式,但使用 glob 并没有那么长

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

附带说明一下,您应该避免使用所有大写的变量名,因为您可能会覆盖特殊的 shell 变量或环境变量。

于 2012-08-28T18:25:49.207 回答
5

dash 没有内置正则表达式比较,但您始终可以使用 grep:

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

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

于 2012-08-28T18:54:53.187 回答