год должен состоять только из 4 цифр, только тогда скрипт должен быть paas

Я ничего не знаю о космических маках, но это похоже на проблему с кодировкой.

Ваш персонаж уже является неплохим тестом.

$ 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

-1
26.07.2019, 17:33
1 ответ

В оболочке 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
6
28.04.2021, 23:31

Теги

Похожие вопросы