[英]unexpected operator [: git: in bourne shell script 'if' conditional statement
[英]What is the regex matching operator in bourne shell script?
我正在嘗試根據正則表達式驗證用戶輸入。
vari=A
if [ $vari =~ [A-Z] ] ;
then
echo "hurray"
fi
我得到的輸出是 swf.sh[3]: =~: unknown test operator。
你能告訴我我可以使用的測試運算符嗎?
它沒有內置在 Bourne shell 中,您需要使用 grep:
if echo "$vari" | grep -q '[A-Z]'; then
echo hurray
fi
如果要匹配整個字符串,請記住使用正則表達式錨點^
和$
。 請注意, -q
標志使 grep 安靜,因此它唯一的輸出是匹配/不匹配的返回值。
POSIX shell 沒有正則表達式運算符(或者更確切地說,POSIX test
命令沒有)。 相反,您可以使用expr
命令進行(有限)形式的正則表達式匹配。
if expr "$vari" : '[A-Z]' > /dev/null; then
(我說“有限”是因為它總是在字符串的開頭匹配,就像正則表達式以^
開頭一樣。)如果匹配,則退出狀態為 0; 它還寫入與標准輸出匹配的字符數,因此重定向到/dev/null
。
如果您實際使用bash
,則需要使用[[
命令:
if [[ $vari =~ [A-Z] ]]; then
像這樣嘗試:
if [[ $vari =~ "[A-Z]" ]]
then
echo "hurray"
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.