函数失败但在cli上作为oneliner工作

时间:2014-08-19 02:13:31

标签: bash

这个功能我为了我的目的而扯下并入侵:

function chkUrl () {
urlRegex="(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]"

    url="$1" ; notSend "$LINENO" "url" "$url" "tn"
    #url="http://cloud0.storagedump.com/e7f8630b74678c157f37998a1f7e5151" #; notSend "$LINENO" "url" "$url" "tn"

    if [[ ! "$url" =~ "$urlRegex" ]] ; then 

            exit "$LINENO"

    fi
}

验证网址条目是否正常,在线做任何事情之前,在脚本中出现错误,我无法理解原因。但是作为一个oneliner进入cli,命令在输入函数失败的相同URL时运行良好。

我确信我只是犯了一些明显的错误,如果有人能告诉我它可能是什么,那对我来说并不是太明显。

2 个答案:

答案 0 :(得分:2)

对于要识别的表达式,不应将其括在双引号旁边:

if [[ ! "$url" =~ $urlRegex ]]; then 

此外,exit会使脚本退出。如果要从函数返回代码,请使用return

return "$LINENO"

另请注意,在shell脚本中,命令的“true”返回值为零,而“false”(有错误)为非零。试试true; echo $?false; echo $?

答案 1 :(得分:1)

Native shell regex是Bash 4.x的一个功能。您的oneliner可能有效,因为您在交互式shell中运行它,即Bash 4.x。

如果你把它放在一个shell脚本中,那么使用shebang #!/bin/sh你就可以使用POSIX sh功能了。没有本地正则表达式。

首先尝试#!/bin/bash作为shebang。