Вам не обязательно нужен UTF-8, чтобы столкнуться с проблемами здесь.Локаль отвечает за установку классов символов, т. Е. За определение того, какой символ является пробелом, буквой или цифрой.Рассмотрим два следующих примера:
$ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep '[[:alnum:]]' || echo false
ä
$ echo -e '\xe4' | LC_ALL=C grep '[[:alnum:]]' || echo false
false
При попытке сопоставить точные двоичные шаблоны друг с другом, языковой стандарт не имеет значения, однако:
$ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep "$(echo -e '\xe4')" || echo false
ä
$ echo -e '\xe4' | LC_ALL=C grep "$(echo -e '\xe4')" || echo false
ä
Я не уверено степени grep, реализующей юникод, и о том, насколько хорошо разные кодовые точки сопоставляются друг с другом, но сопоставление любого подмножества ASCII и сопоставление отдельных символов без альтернативных двоичных представлений должно работать нормально независимо от локали.