我在我的bash脚本中写了一个小帮助函数来验证用户输入脚本的票号作为参数
票号结构必须如下:TICKET
+ 7位数,例如TICKET1234567
。
问题是,一旦用户键入了票号,只有在我手动键入它时才接受正则表达式,但如果我从记事本或任何其他文本编辑器复制并粘贴它,则正则表达式比较失败,退出状态为1
注意:如果粘贴票号和echo $TICKET
,我会看到正确的票号。
这是功能:
#helper to check TICKET number structure
ticket_helper (){
[[ $TICKET =~ '^TICKET[0-9]{7}$' ]]
ES=$?
if [[ $ES -ne 0 ]];then
echo "Error:Please enter a valid TICKET number"
exit 1
fi
}
#requests user to enter TICKET number
read -p "Please Ticket Number " TICKET
ticket_helper
如何从编辑器粘贴函数时让函数接受票号?
答案 0 :(得分:2)
从模式中删除周围的引号。
替换:
[[ $TICKET =~ '^TICKET[0-9]{7}$' ]]
with:
[[ $TICKET =~ ^TICKET[0-9]{7}$ ]]
使用引号,该模式强制匹配为字符串 (来自https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html)
答案 1 :(得分:1)
由于单引号,您的正则表达式按字面解释。最好在变量中的条件运算符之外定义它。
使用小写变量名称而不是大写变量名称也是一种好习惯,因为它们不太可能与现有(环境)变量冲突。
您可以直接使用条件而不是检查退出状态:
ticket_helper () {
local re='^TICKET[0-9]{7}$'
if [[ ! $ticket =~ $re ]]; then
echo "Error:Please enter a valid TICKET number"
exit 1
fi
}