Dies ist auf Dash et al. übertragbar. und IMHO eleganter.
case $str in
*['!&()'@#$%^*_+]* ) echo yup ;;
esac
Vergleichen Sie es mit einem Glob. Sie müssen nur die Zeichen maskieren, die die Shell sonst als besonders betrachtet:
#!/bin/bash
str='some text with @ in it'
if [[ $str == *['!'@#\$%^\&*()_+]* ]]
then
echo "It contains one of those"
fi