Равняется оператору, ничего не делает в этом случае.
$S1=$S2 выражения оценивает к фактической строке, со значениями S1 и S2 на месте, эффективно строкового литерала "foo=bar".
Так как этот строковый литерал не является пустым, оператор
if [ "foo=bar" ];
оценивает к истинному, и тело, если оператор выполняется.
Сначала удостоверьтесь, что ОС, которую Вы выполняете, настроена для поддержки UTF-8. По-моему, они должны все поддерживать UTF-8 по умолчанию, но некоторые не делают. Не зная, какое распределение Вы используете, трудно дать подробный ответ.
На Ubuntu Вы отредактировали бы файл /etc/default/locale
и удостоверьтесь это LANG="en_US.UTF-8"
там (если Вы используете другой язык затем en_US
может быть что-то еще, но UTF-8
должен ли быть). Если это не, изменитесь/добавьте его и работайте locale-gen
, затем перезапустите эмулятор терминала, и Вы сделаны.
Только, чтобы удостовериться, что Ваше терминальное кодирование установлено использовать UTF-8, можно выполнить следующую команду:
locale charmap # UTF-8