Toto je přenosné pro Dash et al. a IMHO elegantnější.
case $str in
*['!&()'@#$%^*_+]* ) echo yup ;;
esac
Porovnejte to s globem. Musíte pouze escapovat znaky, které shell jinak považuje za speciální:
#!/bin/bash
str='some text with @ in it'
if [[ $str == *['!'@#\$%^\&*()_+]* ]]
then
echo "It contains one of those"
fi