Я ничего не знаю о космических маках, но это похоже на проблему с кодировкой.
Ваш персонаж уже является неплохим тестом.
$ echo -e "\u2502"
â
Чтобы настроить кодировку UTF -8 (, которая отлично подходит для данных ASCII ), убедитесь, что все ваши языковые переменные содержат UTF -8.
Достаточно сделать:
export LC_ALL=en_GB.UTF-8
export LANG=en_GB.UTF-8
export LANGUAGE=en_GB.UTF-8
затем запустите локаль, чтобы подтвердить это.
$ export LC_ALL=en_GB.UTF-8
$ export LANG=en_GB.UTF-8
$ export LANGUAGE=en_GB.UTF-8
$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8
Сейчас еще раз проверю
$ echo -e "\u2502"
│
Это в вашем.bashrc должно решить эту проблему.
Убедитесь, что ваш эмулятор терминала (, если таковой )действительно использует правильную кодировку. Он должен правильно прочитать его из $LC_TYPE
, я полагаю, но у некоторых есть настройки, чтобы переопределить это в своих предпочтениях.
Если вы также хотите настроить/протестировать цвета, убедитесь, что в переменной term установлено 256 цветов
export TERM="xterm-256color"
256colors.pl — хороший тест для этогоhttps://gist.github.com/hSATAC/1095100
В оболочке POSIX:
case $yy in
([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
echo OK;;
(*)
echo >&2 not OK;;
esac
Которую вы также можете поместить в функцию типа:
valid_year() case $1 in
([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
true;;
(*)
false;;
esac
А затем использовать в конструкции if
, например:
if valid_year "$yy"; then
echo OK
else
echo >&2 not OK
fi
С помощью ksh93 вы можете сократить до:
case $yy in
({4}(\d)) echo OK;;
(*) echo >&2 not OK;;
esac
И вzsh -o extendedglob
:
case $yy in
([0-9](#c4)) echo OK;;
(*) echo >&2 not OK;;
esac
С bash/zsh/ksh93/yash вы также можете использовать:
if [[ $yy =~ [[:digit:]]{4} ]]; then
echo OK
else
echo >&2 not OK
fi
Чтобы проверить только длину (в количестве символов )переменной, в дополнение к case $yy in (????)
вы можете сделать:
if [ "${#yy}" -eq 4 ]; then
echo OK
else
echo >&2 not OK
fi
Другие более запутанные подходы POSIX с использованием утилиты [
для проверки того, что переменная имеет длину 4 символа и не содержит никаких символов, кроме цифр, были бы с:
if [ "${#yy}" -eq 4 ] && [ -n "${yy##*[![:digit:]]*}" ]; then
echo OK
else
echo >&2 not OK
fi