我想知道检查字符串是否为
的最佳方法是什么$str
包含以下任何字符
!@#$%^&*()_+
我想过使用ASCII值,但是对于如何实现它有点困惑。
或者,如果有一种更简单的方法可以根据值检查字符串。
答案 0 :(得分:20)
将它与glob匹配。你只需要逃避shell认为特殊的字符:
#!/bin/bash
str='some text with @ in it'
if [[ $str == *['!'@#\$%^\&*()_+]* ]]
then
echo "It contains one of those"
fi
答案 1 :(得分:5)
这对Dash等人来说是可移植的。和恕我直言更优雅。
case $str in
*['!'@#$%^&*()_+]* ) echo yup ;;
esac
答案 2 :(得分:0)
使用expr
str='some text with @ in it'
if [ `expr "$str" : ".*[!@#\$%^\&*()_+].*"` -gt 0 ];
then
echo "This str contain sspecial symbol";
fi
答案 3 :(得分:0)
我认为一种简单的做法就是删除任何字母数字字符和空格。
echo "$str" | grep -v "^[a-zA-Z0-9 ]*$"
如果您有一堆字符串,那么将它们放在像strFile这样的文件中,并且以下命令可以满足需要。
cat strFile | grep -v "^[a-zA-Z0-9 ]*$"
答案 4 :(得分:0)
您还可以使用正则表达式:
if [[ $str =~ ['!@#$%^&*()_+'] ]]; then
echo yes
else
echo no
fi
没有什么可以逃脱的,因为特殊字符位于单引号中; []
的意思是“包含的字符串中的任何内容”;并且由于该模式中没有^
或$
,因此它将与$str
中的任何位置匹配。