这个功能我为了我的目的而扯下并入侵:
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时运行良好。
我确信我只是犯了一些明显的错误,如果有人能告诉我它可能是什么,那对我来说并不是太明显。
答案 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。