簡體   English   中英

bourne shell 腳本中的正則表達式匹配運算符是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM