0

如果[xxx]

如何表达字符串或文件包含'.'

我是学习shell的新手,感谢您的帮助

4

3 回答 3

2

您可以使用匹配运算符:

$ if [[ "abc.def" =~ \. ]]; then echo "yes"; else echo "no"; fi
yes

$ if [[ "abcdef" =~ \. ]]; then echo "yes"; else echo "no"; fi
no

如果点是字符串中的第一个或最后一个(或唯一一个)字符,则匹配。如果您希望点的两边都有字符,您可以执行以下操作:

$ if [[ "ab.cdef" =~ .\.. ]]; then echo "yes"; else echo "no"; fi
yes

$ if [[ ".abcdef" =~ .\.. ]]; then echo "yes"; else echo "no"; fi
no

$ if [[ "abcdef." =~ .\.. ]]; then echo "yes"; else echo "no"; fi
no

您还可以使用模式匹配:

$ if [[ "ab.cdef" == *?.?* ]]; then echo "yes"; else echo "no"; fi
yes

$ if [[ ".abcdef" == *?.?* ]]; then echo "yes"; else echo "no"; fi
no

$ if [[ "abcdef." == *?.?* ]]; then echo "yes"; else echo "no"; fi
no

Greg's Wiki上有一个很好的关于模式和正则表达式的参考资料

于 2012-07-05T05:53:00.273 回答
1

bash支持 glob 样式的模式匹配:

if [[ "$file" = *?.?* ]]; then
   ...
fi

请注意,这也假定了一个前缀- 这也确保它不会与.and..目录匹配。

如果要检查特定扩展名:

if [[ "$file" = *?.foo ]]; then
   ...
fi
于 2012-07-05T05:58:40.927 回答
-2
echo "xxx.yyy" | grep -q '\.'
if [ $? = 0 ] ; then
    # do stuff
fi

或者

echo "xxx.yyy" | grep -q '\.' && <one statement here>
#e.g.
echo "xxx.yyy" | grep -q '\.' && echo "got a dot"
于 2012-07-05T05:54:40.227 回答