Caso você deseje portar palavras inteiras portavelmente, primeiro você precisa definir como as palavras são delimitadas. Se escolhermos a definição de GNU grep -w
, então uma palavra é uma sequência de letras, números ou sublinhados (e um delimitador seria qualquer caractere que não seja nenhum deles). Infelizmente, a definição de "carta" é dependente de localidade. Os shells POSIX podem especificar letras (com [[: alpha:]], mas eu não sei de nenhuma variante do shell Bourne que tenha. Então, com um shell POSIX, você poderia fazer:
word_delimiter='[![:alnum:]_]'
case +$INPUT+ in
(*${word_delimiter}dolor${word_delimiter}*) echo true;;
(*) echo false;;
esac
E no shell Bourne, você teria que assumir as letras dos EUA:
word_delimiter='[!a-zA-Z0-9_]'
case +$INPUT+ in
*${word_delimiter}dolor${word_delimiter}*) echo true;;
*) echo false;;
esac
Outras opções:
if
tr -cs '[:alnum:]_' '[\n*]' << EOF | grep -qx dolor
$INPUT
EOF
then
echo true
else
echo false
fi
Embora essa sintaxe seja POSIX, se você tiver que lidar com um sistema tão antigo quanto um que tenha um shell Bourne, você pode ter problemas com a sintaxe "tr", já que costumava haver duas variantes principais dele no antigo pre -POSIX dias.