Похоже, что вы используете консоль Linux (а не один из эмуляторов терминала на базе X), и что она не работает в режиме UTF-8. Я бы использовал этот сценарий, чтобы включить его (и выяснить, почему он выключен):
#!/bin/sh
# send character-string to enable UTF-8 mode
if test ".$1" = ".off" ; then
printf '\033%%@'
else
printf '\033%%G'
fi
то есть, вызовите сценарий utf8
, и введите
utf8 on
Чтобы исследовать сообщения об ошибках, я сделал такой сценарий, в двух вариантах (один в UTF-8, а другой в ISO-8859-1):
#!/bin/bash
printf "ä\n"
echo "ä"
ä
Скрипт UTF-8 говорит
$ ./foo
ä
ä
./foo: line 4: ä: command not found
а скрипт ISO-8859-1 говорит (в терминале, использующем локаль с кодировкой UTF-8):
$ ./foo2
�
�
./foo2: line 5: $'\344': command not found
Дело в том, что bash
корректирует свое сообщение об ошибке в соответствии с локалью, и, видя, что он не может показать символ ISO-8859-1 в локали UTF-8, показывает его как восьмеричное число.