如果[xxx]
如何表达字符串或文件包含'.'
我是学习shell的新手,感谢您的帮助
您可以使用匹配运算符:
$ 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上有一个很好的关于模式和正则表达式的参考资料
bash
支持 glob 样式的模式匹配:
if [[ "$file" = *?.?* ]]; then
...
fi
请注意,这也假定了一个前缀- 这也确保它不会与.
and..
目录匹配。
如果要检查特定扩展名:
if [[ "$file" = *?.foo ]]; then
...
fi
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"